当使用clang或gcc编译C++11时,我可以在编译时使用以下命令生成警告消息:
#warning My message here
字符串
但是,当我使用MSVC时,这在Windows上不起作用。我如何故意生成一个警告消息,而不管C++编译器如何?
这个问题不是"preprocessor #warning equivalent in Visual C++?"的重复,因为那个问题并不试图回答如何以跨编译器工作的方式实现它的问题。
当使用clang或gcc编译C++11时,我可以在编译时使用以下命令生成警告消息:
#warning My message here
字符串
但是,当我使用MSVC时,这在Windows上不起作用。我如何故意生成一个警告消息,而不管C++编译器如何?
这个问题不是"preprocessor #warning equivalent in Visual C++?"的重复,因为那个问题并不试图回答如何以跨编译器工作的方式实现它的问题。
2条答案
按热度按时间bejyjqdl1#
以这个答案为起点,我找到了一个在gcc、clang和MSVC中工作的方法。下面的预编译器魔术将做到这一点:
字符串
您可以使用以下命令触发警告:
型
在MSVC的情况下,它显示编译器消息的格式与编译器显示警告消息的格式相同,这会导致它被检测为警告。(使用
C0000
只是为了坚持该格式。C0000
实际上不是MSVC中有效的警告消息编号。)在GCC / clang的情况下,它只是使用支持的杂注来显示警告消息,使用
_Pragma()
而不是#pragma
或#warning
。qnzebej02#
#warning
不是标准的C99特性(因为有些编译器只支持C99,有些程序可能不能用C++11及以后的标准库编译),所以不能在不支持它的编译器上使用。你可以使用#ifdef
检查定义的编译器,并根据编译器修改指令。最简单(但不是最好)的解决方案:字符串
MSVC使用
#pragma
而不是#warning