在VS2012

时间:2015-07-03 11:16:47

标签: visual-studio-2012 visual-c++

我将项目的警告级别设置为4,并且在包含afxwin.h时发现#pragma warning(pop)在发布版本中似乎失败

这是一个复制代码:

#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:&#39; x&#39; :局部变量已初始化但未引用

每个boo函数一个。 如果我切换到发布,我只得到一个,第一个。

#include <afxwin.h>

表现得很奇怪,我想知道会发生什么。似乎VS 2013没有这种行为,除非我重新定位VS2013解决方案以使用v110 Visual Studio 2012平台工具集。

我找到了一个模糊的编译器错误吗?

1 个答案:

答案 0 :(得分: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行的第二个push pragma必须是pop语句。