我有一個項目,我剛剛發現警告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