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

#c #compiler-construction #visual-studio-2013 #warnings

#c #компилятор-конструкция #visual-studio-2013 #предупреждения

Вопрос:

Всем доброго утра. Итак, я пытаюсь отключить предупреждение 4996 в наших проектах на c . Кажется, он включен в командную строку, как показано ниже, но при компиляции все равно появляется предупреждение 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 FilesMicrosoft SharedMSEnv" /I"C:Program Files (x86)MSBuild..Common FilesDesigner" /I"D:WorkspacesMST_Sustaining_SecondInc" /I"D:WorkspacesMST_Sustaining_SecondDevelopSharedInclude" /Zi /Gm /Od /Fd"D:WorkspacesMST_Sustaining_SecondDevelopIDEGrACEDebugvc120.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:WorkspacesMST_Sustaining_SecondDevelopIDEGrACEDebug" /EHs /nologo /Fo"D:WorkspacesMST_Sustaining_SecondDevelopIDEGrACEDebug" /Fp"D:WorkspacesMST_Sustaining_SecondDevelopIDEGrACEDebugace.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() { }
  

Комментарии:

1. На самом деле очень полезно! Это означает, что вы не будете отключать какие-либо другие «устаревшие» предупреждения как побочный продукт попытки компиляции вашего проекта на C 11

2. переходная ссылка на блог Пэта Бреннера re: эта проблема

Ответ №2:

Для того, чтобы Пэт Бреннер (команда разработчиков Visual C Libraries) упомянул в своем блоге ,

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

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

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

Перейдите в Свойства проекта-> C 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.0VCincludestring.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.0VCincludestring.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 , если вы используете его для процесса сборки. Добавить _CRT_NONSTDC_NO_DEPRECATE в Свойства проекта> C C > Препроцессор> Определение препроцессора

Комментарии:

1. Для VS 2017 это ошибки, а не предупреждения. Это правильный ответ.