【问题标题】:Difference between preprocessor directives #error and #warning预处理器指令#error 和#warning 之间的区别
【发布时间】:2017-02-14 02:22:57
【问题描述】:

在这两个预处理器代码中,它们有什么区别以及它们是如何使用的?

#error "¡ERROR GRAVISIMO!"

#warning "ABC está obsoleto. Use XYZ en su lugar."

【问题讨论】:

  • 这些不是宏。并且只有一个指令是标准 C。提示:它不是第二个。
  • 为什么不阅读编译器的文档? gcc 例如说:“指令 '#error' 导致预处理器报告致命错误......指令 '#warning' 类似于 '#error',但会导致预处理器发出警告并继续预处理。 "
  • 也许你忘了有个搜索引擎叫google做一些努力并阅读standardGNU CPP

标签: c compiler-errors c-preprocessor compiler-warnings


【解决方案1】:

#error 用于创建错误,使程序无法编译。 #warning 产生编译器警告,但不会阻止程序编译。这里有两张截图说明了这一点:

错误:

警告:

请注意,在第一种情况下构建失败,在第二种情况下构建成功完成。

#error 用于当你想阻止程序在某些条件下编译时,通常是因为程序在那时无法正常工作,如果程序应该能够编译但可能无法工作,则使用#warning正确,您想帮助用户了解原因。

如果程序以 C++ 模式而不是 C 模式编译,则以下示例会产生错误或警告。请注意,C++ 编译器会自动创建宏 __cplusplus

错误:

#ifdef __cplusplus
    #error This program isn't compatible with C++!
#endif

警告:

#ifdef __cplusplus
    #warning You are compiling this as a C++ program, but it's recommended to compile it as a C program.
#endif

第一个代码用于不支持 C++ 的程序,第二个代码用于在 C++ 中可能有奇怪行为但仍支持它的程序。这些当然只是如何使用#error#warning 的示例。

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多