2017-02-14 47 views
-1

在这两个预处理器代码中,它们有什么区别?它们是如何使用的?预处理器指令#error和#warning之间的区别

#error "¡ERROR GRAVISIMO!" 

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

这些都不是宏。只有一个指令是标准C.提示:它不是第二个。 – Olaf

+6

为什么不从编译器读取文档?例如[gcc](https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html)说:“#error'指令会导致预处理器报告一个致命错误...指令'#warning'就像'#error',但会导致预处理器发出警告并继续预处理。“ – kaylum

+2

也许你忘了有一个名为[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) –

回答

0

#error用于创建错误,防止编译程序。 #warning会产生编译器警告,但不会防止程序编译。这里有两个屏幕截图是说明:

错误:

enter image description here

警告:

enter image description here

请注意,在第一种情况下构建失败而在第二种情况下,构建成功完成。当你想从编译在一定的条件下,通常是因为该程序将无法正常工作,然后继续程序

#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的例子。