Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C中的#错误++;工作_C++_C_C Preprocessor - Fatal编程技术网

C++ C/C中的#错误++;工作

C++ C/C中的#错误++;工作,c++,c,c-preprocessor,C++,C,C Preprocessor,我从#猜测它只是一个编译时实用程序。如何在C/C++程序中使用它 在互联网上没有找到太多关于它的信息。任何链接都会有帮助。它会导致编译器(或预处理器)输出错误消息。在C++中,它还使翻译单元不正确地形成(即,它导致编译失败)。 如果您有几个可以定义的宏,并且希望确保只定义它们的某些组合,那么如果定义了无效组合,您可以使用#error导致编译失败 如果您想确保某些代码块从未被编译(无论出于何种原因),它也很有用。这里有一个链接,指向Gnu预处理器的文档,解释#error和#warning指令: 特

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

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

它会导致编译器(或预处理器)输出错误消息。在C++中,它还使翻译单元不正确地形成(即,它导致编译失败)。 如果您有几个可以定义的宏,并且希望确保只定义它们的某些组合,那么如果定义了无效组合,您可以使用
#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就充斥着它。