2015-07-03 79 views
0

我將項目的警告級別設置爲4,並意識到#pragma warning(pop)在包含afxwin時似乎在發佈版本中失敗.H當在VS2012中包含afxwin.h時,使用#pragma警告(彈出)恢復警告狀態失敗(不調試)

這裏是一個再現代碼:

#pragma warning(push, 4) 

void boo1() 
{ 
    auto x = 43; 

} 

#pragma warning(push) 

#define _AFXDLL 
#include <afxwin.h> 

#pragma warning(pop) 

void boo2() 
{ 
    auto x = 43; 

} 

在調試,我得到兩個消息

警告C4189: 'X':局部變量初始化但未被引用

每個boo函數。 如果我切換到釋放狀態,我只能得到一個,第一個。

#include <afxwin.h> 

行爲怪異,我不知道會發生什麼。看起來,VS 2013沒有這種行爲,除非我重新調整VS2013解決方案以使用v110 Visual Studio 2012平臺工具集。

我發現了一個不明顯的編譯器錯誤嗎?

回答

2

快速谷歌搜索顯示,這個問題爲Visual Studio 2012是reported和門票固定在2013年引用:

我們發現在afxwin2.inl這個問題的一個很可能的原因,行784 - 791 :

#pragma warning(push) 
#pragma warning(disable: 6001 6054) 
_AFXWIN_INLINE int CListBox::GetText(_In_ int nIndex, _Pre_notnull_ _Post_z_ LPTSTR lpszBuffer) const 
{ 
ASSERT(::IsWindow(m_hWnd)); 
return (int)::SendMessage(m_hWnd, LB_GETTEXT, nIndex, LPARAM)lpszBuffer); 
} 
#pragma warning(push) 

上線791的第二個推動編譯必須是一個流行的語句。