我有一个项目,我刚刚发现警告C4244(可能丢失数据)正在被抑制。我强烈怀疑一些不起眼的MS头部正在压制这个警告,并且对包含所述头部的所有翻译单元进行抑制,但是我还没有确定他们的无数头部中哪些头部可能有问题。因此,像任何其他编程问题一样,我想先做二进制搜索,打印出当前的警告级别,如果可能的话,在我的主要预编译头文件中打印出任何压制的警告。VC++编译器:如何确定当前的警告级别或覆盖?
有没有人知道我可能会使用什么编译器指令,或者我可能采取哪种方法来提供这些信息?
我不能告诉你,如果发现在我的头文件中仔细构造的类型声明无法在调用者违反合同并尝试向我发送一个整数而不是有符号字节时给予编译器警告(这是导致了目前我试图解决的错误)。
想法?
注:通过我的整个解决方案的#pragma
搜索拿出仅有的#pragma均衡声明警告(禁用:XXXX),随后用#pragma警告(默认:XXXX)。并没有那些参考4244.
搜索4244在整个解决方案返回没有匹配(我从来没有重写该警告,也没有任何我包括的库,子项目等)。
在4244上遍及整个MS的搜索包括路径返回几个引用,那么出现要根据在调用它们之前设置的#define符号进行平衡或几乎如此。因此,我怀疑MS是错误的(加上MS在他们的头文件中做了琐碎的工作)。
该语法在VS 2008下被拒绝。它希望将特定警告重置为默认值。因此,我必须使用#pragma warning(默认值:4244) 我可以找到的唯一标题是指4244: C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ include \ comdef .h(30):#pragma warning(disable:4244) C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ include \ atldb.h(74):#pragma warning(disable:4244) C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ include \ atldbcli.h(38):#pragma warning(disable:4244) – Mordachai 2009-06-10 16:19:58