Supprimer les avertissements sécurisés (_CRT_SECURE_NO_WARNINGS) des projets par défaut dans Visual Studio

195

Existe-t-il un moyen de définir par défaut pour tous les projets la suppression des avertissements sécurisés du précompilateur qui apparaissent lors de l'utilisation de fonctions comme scanf (). J'ai trouvé que vous pouvez le faire en ajoutant une ligne dans l'option de projet ou un#define _CRT_SECURE_NO_WARNINGS au début du code.

Je me retrouve à créer à plusieurs reprises de nouveaux projets pour résoudre des concours de programmation et il est vraiment ennuyeux (et prend un temps précieux) d'ajouter:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

Au début du code, ou pour le définir dans les options du précompilateur à chaque fois que je démarre un nouveau projet.

Juan Martinez
la source
2
Vous pouvez exporter un modèle de projet avec _CRT_SECURE_NO_WARNINGS défini.
BlueWanderer
Cela semble être une bonne solution de contournement. J'y regarde. Merci!
Juan Martinez
3
vous oubliez le 1 à la fin #define _CRT_SECURE_NO_WARNINGS 1
Martijn van Wezel
3
@MartijnvanWezel 1 à la fin n'est pas requis.
qqqqq
1
@qqqqq Cela forcera à être vrai
Martijn van Wezel

Réponses:

286

Marquez tous les projets souhaités dans l'explorateur de solutions.

Appuyez sur Alt-F7 ou faites un clic droit dans l'explorateur de solutions et sélectionnez "Propriétés"

Configurations: toutes les configurations

Cliquez sur la ligne Définitions du préprocesseur pour appeler son éditeur

Choisissez Modifier ...

Copiez "_CRT_SECURE_NO_WARNINGS" dans la zone blanche des définitions de préprocesseur en haut.

entrez la description de l'image ici

user2548100
la source
10
Cela décrit comment l'ajouter pour un projet que je pense que l'OP connaît déjà (bien que ce ne soit pas clair à 100%). La question clé est de savoir comment l'ajouter pour qu'elle apparaisse dans tous les projets. Idéalement, comment peut-on l'ajouter à la macro% (PreprocessorDefinitions) pour qu'elle soit incluse partout?
Rob Gilliam
Corrigé au 13 janvier 2015.
Cela ne décrit que la première étape. Une fois que vous avez tout configuré comme vous en avez besoin, vous souhaiterez également exporter un modèle de projet (voir Comment: créer des modèles de projet pour obtenir des instructions).
IIinspectable
92

C'est peut-être parce que je suis encore nouveau sur VS et définitivement nouveau sur C, mais la seule chose qui m'a permis de construire était d'ajouter

#pragma warning(disable:4996)

En haut de mon fichier, cela a supprimé l'erreur C4996 que j'obtenais avec sprintf

Un peu ennuyeux mais parfait pour mon tout petit bout de code et de loin le plus simple.

J'ai lu à ce sujet ici: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx

Shaun314
la source
5
J'ai essayé toutes les variantes de #define montrées sur cette page (avec et sans le 1 à la fin) et seul le #pragma a fonctionné pour moi. (VS2013 Community edition) Je suis sûr que je manque quelque chose, mais à un moment donné, vous en avez juste besoin pour que vous puissiez continuer.
Spike0xff
Eu exactement la même chose - ça fait de la merde mais à la fin de la journée, eh bien, ça marche @ Spike0xff
Shaun314
2
Je peux confirmer que _CRT_SECURE_NO_WARNINGS ne fonctionne pas dans VC ++ 2015 mais fonctionne ci-dessus. Merci!
Shital Shah du
@ShitalShah Votre confirmation est-elle basée sur des expériences personnelles ou sur une documentation officielle de Microsoft?
qqqqq
1
@bri: La définition inconditionnelle de la valeur par défaut peut avoir des effets indésirables. Vous vouliez vraiment restaurer le comportement tel qu'il était auparavant. Pour ce faire, utilisez #pragma warning(push)/ à la#pragma warning(pop) place.
IIinspectable
29

Pas automatiquement, non. Vous pouvez créer un modèle de projet comme BlueWandered l'a suggéré ou créer une feuille de propriétés personnalisée que vous pouvez utiliser pour vos projets actuels et futurs.

  1. Ouvrez le gestionnaire de propriétés (Affichage-> Gestionnaire de propriétés)
  2. Dans le gestionnaire de propriétés, cliquez avec le bouton droit sur votre projet et sélectionnez «Ajouter une nouvelle feuille de propriétés de projet»
  3. Donnez-lui un nom et créez-le dans un répertoire commun. La feuille de propriétés sera ajoutée à toutes les cibles de génération.
  4. Faites un clic droit sur la nouvelle feuille de propriétés et sélectionnez "Propriétés". Cela ouvrira les propriétés et vous permettra de modifier les paramètres comme vous le feriez si vous les éditiez pour un projet.
  5. Allez dans "Propriétés communes-> C / C ++ -> Préprocesseur"
  6. Modifiez le paramètre "Définitions du préprocesseur" et ajoutez-le _CRT_SECURE_NO_WARNINGS.
  7. Enregistrez et vous avez terminé.

Maintenant, chaque fois que vous créez un nouveau projet, ajoutez cette feuille de propriétés comme ceci ...

  1. Ouvrez le gestionnaire de propriétés (Affichage-> Gestionnaire de propriétés)
  2. Dans le gestionnaire de propriétés, cliquez avec le bouton droit sur votre projet et sélectionnez "Ajouter une feuille de propriétés de projet existante"

L'avantage ici est que non seulement vous disposez d'un emplacement unique pour gérer les paramètres communs, mais chaque fois que vous modifiez les paramètres, ils sont propagés à TOUS les projets qui l'utilisent. C'est pratique si vous avez beaucoup de paramètres comme _CRT_SECURE_NO_WARNINGSou des bibliothèques comme Boost que vous souhaitez utiliser dans vos projets.

Captain Obvlious
la source
C'est génial. Je ne peux pas croire que je n'ai jamais découvert le gestionnaire immobilier jusqu'à aujourd'hui.
James Johnston
20

Toutes les solutions ici n'ont pas fonctionné sur mon VS2013, mais j'ai mis le #define _CRT_SECURE_NO_WARNINGSdans le stdafx.h juste avant le#pragma once et tous les avertissements ont été supprimés. Remarque: Je ne code qu'à des fins de prototypage pour soutenir mes recherches, alors assurez-vous de bien comprendre les implications de cette méthode lors de l'écriture de votre code.

J'espère que cela t'aides

PDF417
la source
1
Où est stdafx.hsitué?
SomethingSomething
1
Pour ceux qui ne le savent pas, il devrait être défini comme 1, comme ceci: #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson
11

mes deux cents pour VS 2017:

Je peux confirmer que cela fonctionne dans stdafx.h à la fois dans ces styles:

une)

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 

b)

#define _CRT_SECURE_NO_WARNINGS 1 
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 
#pragma once

(J'ai ajouté une autre définition pour les appels réseau MSDN ..) Bien sûr, je préfère a).

Je peux confirmer que: #define _CRT_SECURE_NO_WARNINGS (sans valeur) NE FONCTIONNE PAS .

PS le vrai point est de mettre ces définitions AVANT les déclarations de fonctions, c'est-à-dire avant * .h

ingconti
la source
Fonctionne également dans Visual Studio 2010.
ebyrob
8

copiez simplement " _CRT_SECURE_NO_WARNINGS " collez-le sur les projets- > propriétés-> c / c ++ -> préprocesseur-> définitions de préprocesseur cliquez sur ok.it fonctionnera

Leninkumar
la source
0

Si votre projet n'utilise pas stdafx.h, vous pouvez placer les lignes suivantes en tant que premières lignes dans votre fichier .cpp et l'avertissement du compilateur devrait disparaître - du moins, c'est le cas pour moi dans Visual Studio C ++ 2008.

#ifdef _CRT_SECURE_NO_WARNINGS
#undef _CRT_SECURE_NO_WARNINGS
#endif
#define _CRT_SECURE_NO_WARNINGS 1

Il est permis d'avoir des commentaires et des lignes vides devant eux.

R Sahu
la source
0

Même si vous pouvez ajouter _CRT_SECURE_NO_WARNINGS aux propriétés de votre projet, le moyen le plus simple consiste à utiliser stdafx.h pour tout type d'avertissement et de désactivation d'erreur, assurez-vous simplement de placer la ligne suivante (et similaire) AVANT

#pragma once

De plus, il n'est pas nécessaire de définir une valeur (c'est-à-dire "1") pour _CRT_SECURE_NO_WARNINGS tant qu'elle est définie. Il devrait donc ressembler à ceci:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once
Michael Haephrati
la source
Ceci est une erreur. La commande ne fait aucune différence. Du tout. Je suppose que vous n'avez jamais expliqué pourquoi cela était nécessaire, car il n'y a aucune raison.
IInspectable
Ce n'est pas une question de "commande", juste une double vérification: si vous placez #define _CRT_SECURE_NO_WARNINGS après #pragma une fois, vous obtiendrez toujours cette erreur!
Michael Haephrati
Le comportement de #pragma onceest défini par l'implémentation, mais suit la norme de facto courante dans Visual Studio. Si cela fait une différence pour vous, que vous ayez défini le symbole du préprocesseur avant le pragma ou après celui-ci, alors vous avez une configuration de projet cassée (cela suppose, que vous assimilez - indûment - "en-têtes précompilés" et "stdafx.h " ).
IInspectable
Que signifie même «configuration de projet interrompue»? J'ai créé un nouveau projet Win32 et testé les deux scénarios.
Michael Haephrati
Veuillez consulter la documentation officielle pour en savoir plus sur les conditions requises réelles pour l'utilisation de ce symbole de préprocesseur.
IInspectable