C / C ++中的#error如何工作?

时间:2010-05-08 21:02:56

标签: c++ c c-preprocessor

我从#猜测它只是一个编译时实用工具。如何在C / C ++程序中使用它?

在互联网上没有找到太多关于它的信息。任何链接都会有所帮助。

3 个答案:

答案 0 :(得分:15)

它会导致编译器(或预处理器)输出错误消息。在C ++中,它还使翻译单元格式不正确(即,它导致编译失败)。

如果您有几个可以定义的宏,并且您希望确定只定义了它们的某些组合,则可以使用#error来导致编译失败,如果定义了无效组合。

如果你想确保永远不会编译某些代码块(无论出于何种原因),它也会很有用。

答案 1 :(得分:11)

用于检查编译器设置以及验证宏值组合。一些随机的例子:

#if !defined(_DLL)
#  error This code will only work properly when compiled with /MD
#endif

#if _WIN32_WINNT < 0x502
#  error Sorry, Windows versions prior to XP SP2 are not supported
#endif

#if defined(_APPLE) && defined(_LINUX)
#  error Conflicting operating system option selected, choose one.
#endif

答案 2 :(得分:3)

以下是Gnu预处理器文档的链接,用于解释#error#warning指令:http://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html

特别是:

  

指令#error导致   预处理器报告致命错误。   形成其余部分的代币   #error后面的行被用作   错误信息。

另见this question关于这些指令的可移植性。