Rimuovi per impostazione predefinita gli avvisi sicuri (_CRT_SECURE_NO_WARNINGS) dai progetti in Visual Studio


195

C'è un modo per impostare di default per tutti i progetti rimuovendo gli avvisi sicuri precompilatori che compaiono quando si usano funzioni come scanf (). Ho scoperto che puoi farlo aggiungendo una riga nell'opzione progetto o a#define _CRT_SECURE_NO_WARNINGS all'inizio del codice.

Mi ritrovo a creare ripetutamente nuovi progetti per risolvere concorsi di programmazione ed è davvero fastidioso (e richiede tempo prezioso) aggiungere:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

All'inizio del codice o per impostarlo nelle opzioni del precompilatore ogni volta che avvio un nuovo progetto.


2
È possibile esportare un modello di progetto con _CRT_SECURE_NO_WARNINGS definito.
BlueWanderer,

Sembra una buona soluzione. Ci sto esaminando. Grazie!
Juan Martinez,

3
dimentichi il 1 alla fine #define _CRT_SECURE_NO_WARNINGS 1
Martijn van Wezel,

3
@MartijnvanWezel 1 alla fine non è richiesto.
qqqqq

1
@qqqqq Sarà forzato per essere vero
Martijn van Wezel,

Risposte:


286

Contrassegna tutti i progetti desiderati in Esplora soluzioni.

Premi Alt-F7 o fai clic con il tasto destro in Esplora soluzioni e seleziona "Proprietà"

Configurazioni: tutte le configurazioni

Fare clic sulla riga Definizioni preprocessore per richiamare il suo editor

Scegli Modifica ...

Copia "_CRT_SECURE_NO_WARNINGS" nella casella bianca Definizioni preprocessore in alto.

inserisci qui la descrizione dell'immagine


10
Descrive come aggiungerlo per un progetto che penso già l'OP (sebbene non sia chiaro al 100%). La domanda chiave è come aggiungerla in modo che appaia in tutti i progetti. Idealmente, come si può aggiungere alla macro% (PreprocessorDefinitions) in modo che venga inclusa ovunque?
Rob Gilliam,

Risolto il 13 gennaio 2015.

Questo descrive solo il primo passo. Dopo aver configurato tutto nel modo desiderato, sarà necessario esportare anche un modello di progetto (vedere Procedura: creare modelli di progetto per istruzioni).
Indispensabile

92

Potrebbe essere stato perché sono ancora nuovo in VS e sicuramente nuovo in C, ma l'unica cosa che mi ha permesso di costruire è stata l'aggiunta

#pragma warning(disable:4996)

Nella parte superiore del mio file, questo ha eliminato l'errore C4996 che stavo ottenendo con sprintf

Un po 'fastidioso ma perfetto per il mio pezzettino di codice e di gran lunga il più semplice.

Ne ho letto qui: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx


5
Ho provato tutte le varianti di #define mostrate in questa pagina (con e senza 1 alla fine) e solo #pragma ha funzionato per me. (VS2013 Community edition) Sono sicuro che mi manca qualcosa, ma ad un certo punto, hai solo bisogno che funzioni in modo da poter continuare.
Spike0xff,

Aveva la stessa identica cosa - sembra di merda ma alla fine della giornata, beh ***, funziona @ Spike0xff
Shaun314

2
Posso confermare che _CRT_SECURE_NO_WARNINGS non funziona in VC ++ 2015 ma sopra funziona. Grazie!
Shital Shah,

@ShitalShah La tua conferma si basa su esperimenti personali o sulla documentazione ufficiale di Microsoft?
qqqqq,

1
@bri: l'impostazione incondizionata del valore predefinito può avere effetti indesiderati. Volevi davvero riportare il comportamento a quello che era prima. Per farlo, usa #pragma warning(push)/#pragma warning(pop) invece.
Indispensabile

29

Non automaticamente, no. Puoi creare un modello di progetto come suggerito da BlueWandered o creare una finestra delle proprietà personalizzata che puoi utilizzare per i tuoi progetti attuali e futuri.

  1. Apri il Gestore proprietà (Visualizza-> Gestore proprietà)
  2. Nel Gestore proprietà fai clic con il pulsante destro del mouse sul progetto e seleziona "Aggiungi nuova scheda proprietà progetto"
  3. Dagli un nome e crealo in una directory comune. La finestra delle proprietà verrà aggiunta a tutti i target di costruzione.
  4. Fare clic con il tasto destro sulla nuova finestra delle proprietà e selezionare "Proprietà". Questo aprirà le proprietà e ti consentirà di modificare le impostazioni proprio come faresti se le modificassi per un progetto.
  5. Vai su "Proprietà comuni-> C / C ++ -> Preprocessore"
  6. Modifica l'impostazione "Definizioni del preprocessore" e aggiungi _CRT_SECURE_NO_WARNINGS.
  7. Salva e il gioco è fatto.

Ora ogni volta che crei un nuovo progetto, aggiungi questa finestra delle proprietà in questo modo ...

  1. Apri il Gestore proprietà (Visualizza-> Gestore proprietà)
  2. Nel Gestore proprietà fai clic con il pulsante destro del mouse sul progetto e seleziona "Aggiungi foglio proprietà progetto esistente"

Il vantaggio qui è che non solo ottieni un unico posto per gestire le impostazioni comuni ma ogni volta che modifichi le impostazioni vengono propagate a TUTTI i progetti che lo utilizzano. Questo è utile se hai molte impostazioni come _CRT_SECURE_NO_WARNINGSo librerie come Boost che vuoi usare nei tuoi progetti.


È fantastico Non posso credere di non aver mai scoperto il Property Manager fino ad oggi.
James Johnston,

20

Tutte le soluzioni qui non hanno funzionato sul mio VS2013, tuttavia ho inserito #define _CRT_SECURE_NO_WARNINGSil file stdafx.h appena prima di#pragma once che tutti gli avvisi fossero eliminati. Nota: solo a scopo di prototipazione codice per supportare la mia ricerca, quindi assicurati di comprendere le implicazioni di questo metodo quando scrivi il tuo codice.

Spero che questo ti aiuti


1
Dove si stdafx.htrova?
SomethingQualcosa del

1
Per chi non lo sapesse, dovrebbe essere definito come 1, in questo modo: #define _CRT_SECURE_NO_WARNINGS 1
kirk.burleson

11

i miei due centesimi per VS 2017:

Posso confermare che funziona in stdafx.h sia in questi stili:

un)

#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

(Ho aggiunto un'altra definizione per le chiamate di rete MSDN ..) Naturalmente preferisco a).

Posso confermare che: #define _CRT_SECURE_NO_WARNINGS (senza un valore) NON FUNZIONA.

PS il vero punto è mettere queste definizioni PRIMA delle dichiarazioni di funzioni, cioè prima di * .h


Funziona anche in Visual Studio 2010.
ebyrob

8

basta copiare " _CRT_SECURE_NO_WARNINGS " incollarlo su progetti-> proprietà-> c / c ++ -> preprocessore-> definizioni del preprocessore fare clic su ok.it funzionerà


0

Se il tuo progetto non utilizza stdafx.h, puoi inserire le seguenti righe come prime righe nel tuo file .cpp e l'avviso del compilatore dovrebbe scomparire, almeno per me in Visual Studio C ++ 2008.

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

Va bene avere commenti e righe vuote prima di loro.


0

Anche se puoi aggiungere _CRT_SECURE_NO_WARNINGS alle proprietà del tuo progetto, il modo più semplice è usare stdafx.h per qualsiasi tipo di avviso e disabilitazione degli errori, assicurati di posizionare la seguente riga (e simili) PRIMA

#pragma once

Inoltre non è necessario definire un valore (ad es. "1") per _CRT_SECURE_NO_WARNINGS fintanto che è definito. Quindi dovrebbe apparire così:

#define _CRT_SECURE_NO_WARNINGS 

#pragma once

Questo non è corretto L'ordine non fa differenza. Affatto. Suppongo che non hai mai spiegato, perché questo fosse necessario, perché non c'è motivo.
Indispensabile

Non si tratta di "ordine", basta ricontrollare: se si inserisce #define _CRT_SECURE_NO_WARNINGS dopo #pragma una volta, si otterrà comunque questo errore!
Michael Haephrati,

Il comportamento di #pragma onceè definito dall'implementazione, ma segue lo standard di fatto comune in Visual Studio. Se fa la differenza per te, sia che tu abbia definito il simbolo del preprocessore prima del pragma o dopo di esso, allora hai una configurazione del progetto rotta (questo presuppone che tu stia, indebitamente, equiparando "intestazioni precompilate" e "stdafx.h " ).
Indispensabile

Qual è anche il significato di "configurazione del progetto non funzionante"? Ho creato un nuovo progetto Win32 e testato entrambi gli scenari.
Michael Haephrati,

Dai un'occhiata alla documentazione ufficiale per conoscere i veri requisiti per l'utilizzo di questo simbolo del preprocessore.
Indispensabile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.