-1
在这两个预处理器代码中,它们有什么区别?它们是如何使用的?预处理器指令#error和#warning之间的区别
#error "¡ERROR GRAVISIMO!"
#warning "ABC está obsoleto. Use XYZ en su lugar."
在这两个预处理器代码中,它们有什么区别?它们是如何使用的?预处理器指令#error和#warning之间的区别
#error "¡ERROR GRAVISIMO!"
#warning "ABC está obsoleto. Use XYZ en su lugar."
#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
的例子。
这些都不是宏。只有一个指令是标准C.提示:它不是第二个。 – Olaf
为什么不从编译器读取文档?例如[gcc](https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html)说:“#error'指令会导致预处理器报告一个致命错误...指令'#warning'就像'#error',但会导致预处理器发出警告并继续预处理。“ – kaylum
也许你忘了有一个名为[google](https://www.google.com)的搜索引擎。 **做一些努力**并阅读[标准](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)和[GNU CPP](https:// gcc.gnu.org/onlinedocs/cpp.pdf) –