我将项目的警告级别设置为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平台工具集。
我找到了一个模糊的编译器错误吗?
答案 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语句。