我通常喜欢在Visual Studio中针对警告级别4进行编译,并将所有警告视为错误。问题是,Ogre3D没有编译警告级别3(FBX SDK或OIS,我也在使用),这也是一个问题,因为现在我收到了来自Ogre3D库的大量警告,现在被视为错误。到目前为止,我一直在第3级编译,但这让我非常不安。有没有办法禁用我无法控制的特定第三方库的警告?
答案 0 :(得分:9)
你没有确切地说你是如何编译的,但这里有一些选择:
1 - 在Visual Studio中,您可以通过每个源文件的属性设置各个源文件的警告级别
2 - 您还可以使用
在文件中动态更改警告级别#pragma warning(push, 3)
// Some code, perhaps #includes
#pragma warning(pop)
将两个pragma之间的警告级别设置为3。
答案 1 :(得分:3)
如果你禁用最知名的MSVC愚蠢警告,问题至少可以成为可管理的。
我的愚蠢警告抑制标题位于my blog;使用<windows.h>
在警告级别4使用MSVC编译代码就足够了,没有任何警告。
除此之外,您可以采用“编译器防火墙”的极端措施,这意味着将第三方库的所有直接使用放在实现文件或一组此类文件中。然后,您可以在低警告级别编译这些文件。但我不认为这是值得的。
干杯&amp;第h。,
答案 2 :(得分:2)
您可以将第三方.h文件包装到您自己的文件中,然后在本地禁用有问题的警告,因为您可能不想禁用所有警告但仅禁用特定警告。
// include_file_wrapper.h
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
#include "file.h"
#pragma GCC diagnostic pop
对于gcc,这是如何做到的
http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas