Visual Studio 2013 不会忽略禁用警告

问题描述 投票:0回答:3

大家早上好。所以我试图在我们的 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.
c++ visual-studio-2013 warnings
3个回答
15
投票

看起来

#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() { }

8
投票

为了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

enter image description here


2
投票

我也遇到过类似的问题,但问题出在

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
。这可以通过以下两种方式之一完成:

  1. 如果直接使用
    -D_CRT_NONSTDC_NO_DEPRECATE
    命令则传递
    cl
  2. 或者来自
    Visual Studio GUI
    (如果您将其用于构建过程)。在
    项目属性 > C\C++ > 预处理器 > 预处理器定义
    中添加 _CRT_NONSTDC_NO_DEPRECATE
© www.soinside.com 2019 - 2024. All rights reserved.