我有一个项目,我刚刚发现警告 C4244(可能丢失数据)正在被抑制。我强烈怀疑某些糟糕的 MS 标头正在抑制此警告,并为所有包含所述标头的翻译单元保留它,但我尚未确定其无数标头中的哪一个可能有问题。
所以,就像任何其他编程问题一样,我想首先进行二进制搜索,打印出当前的警告级别,如果可能的话,在我的主预编译头文件中打印出任何被抑制的警告。
有谁知道我可能使用什么编译器指令,或者我可以采取什么方法来给我这些信息?
我无法告诉你,当调用者违反合同并试图向我发送整数而不是有符号字节时,发现我在标题中精心构造的类型声明未能给出编译器警告是多么令人讨厌(这导致了我正在尝试解决的当前错误)。
想法?
笔记:
通过我的整个解决方案对#pragma 进行搜索,只得到平衡的#pragma warning(disable:xxxx) 声明,然后是#pragma warning(default:xxxx)。这些都没有引用 4244。
在整个解决方案中搜索 4244 不会返回任何匹配项(我从不覆盖该警告,我的任何包含的库、子项目等也不会覆盖)。
在整个 MS 中搜索 4244 包括返回一些引用的路径,这些引用似乎是平衡的,或者几乎是平衡的,这取决于在调用它们之前设置的#define 符号。因此,我怀疑 MS 有过错(结合 MS 在其标题中草率工作的先前历史)。