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

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

Mi trovo ripetutamente a creare nuovi progetti per risolvere contest di programmazione ed è davvero fastidioso (e richiede tempo prezioso) per 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.

Segna tutti i progetti desiderati in Solution Explorer.

Premi Alt-F7 o fai clic destro in Solution Explorer e seleziona “Proprietà”

Configurazioni: tutte le configurazioni

Fare clic sulla riga Definizioni preprocessore per richiamare il relativo editor

Scegli Modifica …

Copia “_CRT_SECURE_NO_WARNINGS” nella casella bianca Preprocessore Definizioni in alto.

inserisci la descrizione dell'immagine qui

Può essere perché sono ancora nuovo per VS e sicuramente nuovo per C, ma l’unica cosa che mi ha permesso di build è stata l’aggiunta

 #pragma warning(disable:4996) 

Nella parte superiore del mio file, questo sopprimeva l’errore C4996 che stavo ottenendo con sprintf

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

Ho letto su di esso qui: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx

Non automaticamente, no. È ansible creare un modello di progetto come suggerito da BlueWandered o creare una finestra delle proprietà personalizzata che è ansible utilizzare per i progetti correnti e per tutti i progetti futuri.

  1. Aprire il Gestore proprietà (Visualizza-> Gestore proprietà)
  2. Nel Gestore proprietà Fare clic con il tasto destro del mouse sul progetto e selezionare “Aggiungi nuova scheda delle proprietà del progetto”
  3. Dagli un nome e crealo in una directory comune. La finestra delle proprietà verrà aggiunta a tutti gli obiettivi di costruzione.
  4. Fare clic con il tasto destro sulla nuova finestra delle proprietà e selezionare “Proprietà”. Questo aprirà le proprietà e ti permetterà di cambiare le impostazioni come faresti se le modificassi per un progetto.
  5. Andare in “Proprietà comuni-> C / C ++ -> Preprocessore”
  6. Modificare l’impostazione “Definizioni preprocessore” e aggiungere _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. Aprire il Gestore proprietà (Visualizza-> Gestore proprietà)
  2. Nel Gestore proprietà Fare clic con il tasto destro del mouse sul progetto e selezionare “Aggiungi scheda progetto esistente”

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

Tutte le soluzioni qui non hanno funzionato sul mio VS2013, tuttavia ho messo #define _CRT_SECURE_NO_WARNINGS nello stdafx.h poco prima di #pragma once e tutti gli avvertimenti sono stati soppressi. Nota: codifico solo a scopi di prototipazione per supportare la mia ricerca quindi assicurati di comprendere le implicazioni di questo metodo quando scrivi il tuo codice.

Spero che questo ti aiuti

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 altro definire per le chiamate di rete MSDN ..) Naturalmente preferisco a).

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

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