Visual Studio 2013 n’ignore pas les avertissements désactivés

Bonjour à tous. J’essaie donc de désactiver l’avertissement 4996 dans nos projets c ++. Il semble être inclus dans la ligne de commande comme indiqué ci-dessous, mais lors de la compilation, apparaît toujours avec le message Avertissement C4966. J’ai essayé de modifier le niveau d’avertissement en 3 ou d’utiliser / w44996, mais aucun n’a fonctionné. Est-ce que quelqu’un sait pourquoi cela pourrait être?

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

EDIT: Typo dans la description. Je veux dire avertissement 4996, pas 4966. 4996 est dans la ligne de commande en tant que / wd “4996”

Pour l’avertissement:

 warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprecated and may be removed in a future version of MFC. 

Il semble que #pragma warning(disable: 4996) ne désactivera pas l’avertissement de dépréciation de MBCS en raison de l’ #pragma warning(1: 4996) avant la ligne _declspec(deprecated) dans afx.h

Pour des raisons obscures, vous devez utiliser #define NO_WARN_MBCS_MFC_DEPRECATION pour le désactiver.

voir afx.h lignes 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() { } 

Pour Pat Brenner (équipe de développement des bibliothèques Visual C ++) mentionné dans son blog ,

nous déconseillons la prise en charge de MBCS dans MFC pour Visual Studio 2013. Cela permet de maintenir l’alignement de MFC sur le SDK Windows lui-même, car la plupart des contrôles et des messages les plus récents sont uniquement au format Unicode.

Cet avertissement peut être éliminé en ajoutant la définition de préprocesseur NO_WARN_MBCS_MFC_DEPRECATION aux définitions de construction de votre projet.

Alors fais ça.

Allez dans Propriétés du NO_WARN_MBCS_MFC_DEPRECATION > C \ C ++ -> Préprocesseur> Définition du préprocesseur et ajoutez NO_WARN_MBCS_MFC_DEPRECATION

entrez la description de l'image ici

J’ai eu un problème similaire, mais c’était sur certaines fonctions de io.h et ssortingng.h telles que celles-ci:

source.cxx(713) : warning C4996: 'ssortingcmp': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _ssortingcmp. See online help for details. C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ssortingng.h(215) : see declaration of 'ssortingcmp'

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\ssortingng.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.

En raison de la nécessité d’exécuter exactement le même code sur d’autres plates-formes, je devais trouver une solution sans trop modifier le code, car cela se produisait dans tout le projet dans de nombreux fichiers.

La solution consistait à append cet indicateur de compilateur _CRT_NONSTDC_NO_DEPRECATE . Cela peut être fait de deux manières:

  1. Passer -D_CRT_NONSTDC_NO_DEPRECATE si vous utilisez directement la commande cl
  2. Ou à partir de l’ Visual Studio GUI de Visual Studio GUI si vous l’utilisez pour le processus de construction. Ajoutez _CRT_NONSTDC_NO_DEPRECATE dans Propriétés du projet> C \ C ++> Préprocesseur> Définition du préprocesseur