Visual Studio 2013 не игнорирует предупреждения об отключении

Доброе утро. Поэтому я пытаюсь отключить предупреждение 4996 в наших проектах на С++. Кажется, что он включен в командную строку, как показано ниже, но при компиляции все еще появляется предупреждение C4966. Я попытался изменить уровень предупреждения на 3 или использовать /w 44996, но ни один из них не сработал. Кто-нибудь знает, почему это может быть?

/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.

Ответ 1

Похоже, что #pragma warning(disable: 4996) не отключит предупреждение о снижении MBCS из-за #pragma warning(1: 4996) перед линией _declspec(deprecated) в afx.h

По неясным причинам вы должны использовать #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() { }

Ответ 2

Для Pat Brenner (команда разработчиков библиотек Visual С++), упомянутых в его blog,

мы обесцениваем поддержку MBCS в MFC для Visual Studio 2013. Это позволяет MFC более точно совмещаться с самим SDK Windows, поскольку многие из новейших элементов управления и сообщений только Unicode

Это предупреждение можно устранить, добавив NO_WARN_MBCS_MFC_DEPRECATION определение препроцессора для вашего проекта строить определения.

Затем сделайте это.

Перейдите в Свойства проекта- > C\С++ → Препроцессор- > Определение препроцессора и добавьте NO_WARN_MBCS_MFC_DEPRECATION

введите описание изображения здесь

Ответ 3

У меня была аналогичная проблема, но она была для некоторых функций от 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, если вы используете его для процесса строительства. Добавить _CRT_NONSTDC_NO_DEPRECATE в Свойства проектa > C\С++ > Препроцессоp > Определение препроцессора