【发布时间】:2010-05-08 21:02:55
【问题描述】:
我从 # 猜测它只是一个编译时实用程序。如何在 C/C++ 程序中使用它?
在互联网上没有找到太多关于它的信息。任何链接都会有所帮助。
【问题讨论】:
标签: c++ c c-preprocessor
我从 # 猜测它只是一个编译时实用程序。如何在 C/C++ 程序中使用它?
在互联网上没有找到太多关于它的信息。任何链接都会有所帮助。
【问题讨论】:
标签: c++ c c-preprocessor
它会导致编译器(或预处理器)输出错误消息。在 C++ 中,它还会呈现格式错误的翻译单元(即,它会导致编译失败)。
如果您有多个可以定义的宏并且您想确保只定义了它们的某些组合,您可以使用#error 在定义无效组合时导致编译失败。
如果您想确保某些代码块永远不会被编译(无论出于何种原因),它也很有用。
【讨论】:
DO_X 和 DO_Y,并且您希望确保一次只设置一个,您可以将 #error 指令包装在#if (defined DO_X) && (defined DO_Y) 块。
blade.c,但它们通过构建系统传递不同的宏以实现稍微不同的功能。那么你可以使用#if SLICING … #elif DICING … #else #error No functionality selected by makefile.
有助于检查编译器设置以及验证宏值组合。一些随机的例子:
#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
【讨论】:
这里是 Gnu 预处理器文档的链接,解释了 #error 和 #warning 指令:http://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html
特别是:
指令
#error导致 预处理器报告致命错误。 构成其余部分的令牌#error之后的行用作 错误信息。
有关这些指令的可移植性,另请参阅 this question。
【讨论】:
#error 指令是 C 和 C++ 语言标准的一部分,并且是完全可移植的。 #warning 是 gcc 特定的语言扩展。