大家早上好。所以我试图在我们的 C++ 项目中禁用警告 4996。它似乎包含在命令行中,如下所示,但编译时,仍然弹出 C4966 警告。我尝试过将警告级别更改为 3,或使用 /w44996,但都不起作用。有谁知道为什么会这样?
/Yu"stdafx.h" /GS- /W4 /wd"4100" /wd"4121" /wd"4201" /wd"4214" /wd"4244" /wd"4996" /Zc:wchar_t /I"C:\Program Files (x86)\MSBuild\..\Common Files\Microsoft Shared\MSEnv" /I"C:\Program Files (x86)\MSBuild\..\Common Files\Designer" /I"D:\Workspaces\MST_Sustaining_Second\Inc" /I"D:\Workspaces\MST_Sustaining_Second\Develop\Shared\Include" /Zi /Gm /Od /Fd"D:\Workspaces\MST_Sustaining_Second\Develop\IDE\GrACE\Debug\vc120.pdb" /fp:precise /D "_USRDLL" /D "ACE_DLL" /D "IQEDITOR_ENABLED" /D "_WINDOWS" /D "_DEBUG" /D "NTDDI_VERSION=NTDDI_WIN7" /D "_WIN32_WINNT=0x0601" /D "WINVER=0x0601" /D "_AFXDLL" /D "WIN32" /D "_SECURE_SCL=0" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /GF- /WX- /Zc:forScope /RTC1 /Gd /Oi /MDd /Fa"D:\Workspaces\MST_Sustaining_Second\Develop\IDE\GrACE\Debug\" /EHs /nologo /Fo"D:\Workspaces\MST_Sustaining_Second\Develop\IDE\GrACE\Debug\" /Fp"D:\Workspaces\MST_Sustaining_Second\Develop\IDE\GrACE\Debug\ace.pch"
编辑:描述中的拼写错误。我的意思是警告 4996,而不是 4966。4996 在命令行中为 /wd"4996"
警告:
warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC.
看起来
#pragma warning(disable: 4996)
不会禁用 MBCS 弃用警告,因为
afx.h 中 #pragma warning(1: 4996)
行之前的 _declspec(deprecated)
由于一些不明原因,您必须使用
#define NO_WARN_MBCS_MFC_DEPRECATION
来禁用此功能。
参见 afx.h 第 28-33 行
#ifndef NO_WARN_MBCS_MFC_DEPRECATION
#ifdef _MBCS
// Warn about MBCS support being deprecated: see http://go.microsoft.com/fwlink/p/?LinkId=279048 for more information.
#pragma warning(push)
#pragma warning(1 : 4996)
inline __declspec(deprecated("MBCS support in MFC is deprecated and may be removed in a future version of MFC.")) void MBCS_Support_Deprecated_In_MFC() { }
为了Pat Brenner(Visual C++ 库开发团队)在他的博客中提到,
我们将不再支持 Visual Studio 2013 的 MFC 中的 MBCS 支持。 使 MFC 与 Windows SDK 本身更加一致,因为 许多最新的控件和消息仅支持 Unicode
可以通过添加以下内容来消除此警告
项目的预处理器定义 构建定义。NO_WARN_MBCS_MFC_DEPRECATION
那就这样做吧。
转到 Project Properties-> C\C++ ->Preprocessor->Preprocessor Definition 并添加
NO_WARN_MBCS_MFC_DEPRECATION
我也遇到过类似的问题,但问题出在
io.h
和 string.h
的某些功能上,例如:
source.cxx(713) : warning C4996: 'stricmp': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _stricmp. See online help for details.
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\string.h(215) : see declaration of 'stricmp'
source.cxx(2416) : warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. See online help for details.
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\string.h(207) : see declaration of 'strdup'
source.cxx(2249) : warning C4996: 'isatty': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _isatty. See online help for det
ails.
由于需要在其他平台上构建完全相同的代码,我必须找到一个解决方案,而无需在代码中做太多修改,因为这种情况在整个项目的很多文件中都发生过。
解决方案是添加此编译器标志
_CRT_NONSTDC_NO_DEPRECATE
。这可以通过以下两种方式之一完成:
-D_CRT_NONSTDC_NO_DEPRECATE
命令则传递 cl
Visual Studio GUI
(如果您将其用于构建过程)。在项目属性 > C\C++ > 预处理器 > 预处理器定义中添加
_CRT_NONSTDC_NO_DEPRECATE