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 > Определение препроцессора