C++ C/C中的#错误++;工作
我从#猜测它只是一个编译时实用程序。如何在C/C++程序中使用它 在互联网上没有找到太多关于它的信息。任何链接都会有帮助。它会导致编译器(或预处理器)输出错误消息。在C++中,它还使翻译单元不正确地形成(即,它导致编译失败)。 如果您有几个可以定义的宏,并且希望确保只定义它们的某些组合,那么如果定义了无效组合,您可以使用C++ C/C中的#错误++;工作,c++,c,c-preprocessor,C++,C,C Preprocessor,我从#猜测它只是一个编译时实用程序。如何在C/C++程序中使用它 在互联网上没有找到太多关于它的信息。任何链接都会有帮助。它会导致编译器(或预处理器)输出错误消息。在C++中,它还使翻译单元不正确地形成(即,它导致编译失败)。 如果您有几个可以定义的宏,并且希望确保只定义它们的某些组合,那么如果定义了无效组合,您可以使用#error导致编译失败 如果您想确保某些代码块从未被编译(无论出于何种原因),它也很有用。这里有一个链接,指向Gnu预处理器的文档,解释#error和#warning指令: 特
#error
导致编译失败
如果您想确保某些代码块从未被编译(无论出于何种原因),它也很有用。这里有一个链接,指向Gnu预处理器的文档,解释
#error
和#warning
指令:
特别是:
指令#error
导致
用于报告致命错误的预处理器。
构成世界其余部分的代币
下面的行#error
用作
错误消息
另请参阅这些指令的可移植性。用于检查编译器设置以及验证宏值组合。一些随机的例子:
#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
#如果!已定义(_DLL)
#错误此代码只有在使用/MD编译时才能正常工作
#恩迪夫
#如果_WIN32_WINNT<0x502
#错误对不起,XP SP2之前的Windows版本不受支持
#恩迪夫
#如果已定义(_APPLE)和已定义(_LINUX)
#选择操作系统选项时出错,请选择一个。
#恩迪夫
您所说的“仅定义某些宏组合”是什么意思。你能举个例子吗?谢谢。@cambr:例如,如果你有两个宏,DO_X
和DO_Y
,并且你想确保一次只设置一个宏,你可以在\if(defined DO_X)和&(defined DO_Y)
块中包装一个\error
指令。@cambr:假设你的公司出售切片机™ 和骰子™. 这两种产品都使用blade.c
,但它们通过构建系统传递不同的宏,以实现稍有不同的功能。然后,你可以使用< C++ >代码,如果切片……………………………………错误。code>#warning是一种特定于gcc的语言扩展。您在实践中真的处理了最后一种吗?用户是否有责任不头脑发热,不使用无意义的编译器标志?你不能检查所有的东西…这只是一个例子。当你接到一个支持电话太多时,你倾向于添加这些内容。例如,Boost就充斥着它。