Domanda

Qual è il modo migliore per disabilitare gli avvisi generati tramite _CRT_SECURE_NO_DEPRECATE che consente di ripristinarli con facilità e funzioneranno su tutte le versioni di Visual Studio?

È stato utile?

Soluzione

Se non vuoi inquinare il tuo codice sorgente (dopo che tutto questo avviso è presente solo con il compilatore Microsoft), aggiungi il simbolo _CRT_SECURE_NO_WARNINGS alle impostazioni del tuo progetto tramite " Progetto " - > " Proprietà " - > " Proprietà di configurazione " - > " C / C ++ " - > " Preprocessore " - > " Definizioni del preprocessore " ;.

Inoltre è possibile definirlo appena prima di includere un file di intestazione che genera questo avviso. Dovresti aggiungere qualcosa del genere

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

E solo una piccola osservazione, assicurati di capire a cosa serve questo avviso e forse, se non intendi utilizzare altri compilatori diversi da MSVC, potresti utilizzare una versione più sicura delle funzioni, ad esempio strcpy_s invece di strcpy.

Altri suggerimenti

È possibile disabilitare temporaneamente gli avvisi nei punti in cui vengono visualizzati utilizzando

#pragma warning(push)
#pragma warning(disable: warning-code) //4996 for _CRT_SECURE_NO_WARNINGS equivalent
// deprecated code here
#pragma warning(pop)

in modo da non disabilitare tutti gli avvisi, che a volte possono essere dannosi.

Lavoro su un progetto multipiattaforma, quindi non posso usare la funzione _s e non voglio inquinare il mio codice con codice specifico di Visual Studio.
la mia soluzione è disabilitare l'avviso 4996 sul progetto Visual Studio. vai a Progetto - > Proprietà - > Proprietà di configurazione - > C / C ++ - > Avanzato - > Disabilitare l'avviso specifico aggiungere il valore 4996.
  se usi anche la libreria mfc e / o atl (non il mio caso), definisci prima di includere mfc _AFX_SECURE_NO_DEPRECATE e prima includi atl _ATL_SECURE_NO_DEPRECATE.
  utilizzo questa soluzione in Visual Studio 2003 e 2005.

P.S. se usi solo Visual Studio, i sovraccarichi di template sicuri potrebbero essere una buona soluzione.

Puoi anche utilizzare Sovraccarichi di template sicuri , ti aiuteranno a sostituire le chiamate non sicure con chiamate sicure ovunque sia possibile dedurre facilmente le dimensioni del buffer (array statici).

Aggiungi semplicemente quanto segue:

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 

Quindi correggi manualmente gli avvisi rimanenti, usando le funzioni _s.

Combinazione di @ [macbirdie] e @ [Adrian Borchardt]. Il che si rivela molto utile nell'ambiente di produzione (non confondere gli avvisi precedentemente esistenti, specialmente durante la compilazione multipiattaforma)

#if (_MSC_VER >= 1400)         // Check MSC version
#pragma warning(push)
#pragma warning(disable: 4996) // Disable deprecation
#endif 
//...                          // ...
strcat(base, cat);             // Sample depreciated code
//...                          // ...
#if (_MSC_VER >= 1400)         // Check MSC version
#pragma warning(pop)           // Renable previous depreciations
#endif

Per l'avvertimento per caso di avvertimento, è consigliabile ripristinarlo al valore predefinito a un certo punto, poiché lo si sta facendo caso per caso.

#pragma warning(disable: 4996) /* Disable deprecation */
// Code that causes it goes here
#pragma warning(default: 4996) /* Restore default */

Il modo migliore per farlo è con un semplice controllo e valutazione. Di solito faccio qualcosa del genere:

#ifndef _DEPRECATION_DISABLE   /* One time only */
#define _DEPRECATION_DISABLE   /* Disable deprecation true */
#if (_MSC_VER >= 1400)         /* Check version */
#pragma warning(disable: 4996) /* Disable deprecation */
#endif /* #if defined(NMEA_WIN) && (_MSC_VER >= 1400) */
#endif /* #ifndef _DEPRECATION_DISABLE */

Tutto ciò che è veramente richiesto è il seguente:

#pragma warning(disable: 4996)

Non mi ha ancora deluso; Spero che questo aiuti

puoi disabilitare il controllo di sicurezza. vai a

Progetto - > Proprietà - > Proprietà di configurazione - > C / C ++ - > Generazione di codice - > Controllo di sicurezza

e selezionare Disabilita controllo di sicurezza (/ GS-)

Puoi definire il simbolo _CRT_SECURE_NO_WARNINGS per sopprimerli e annullarne la definizione per ripristinarli.

Un'altra risposta tardiva ... Ecco come la usa Microsoft nel suo wchar.h . Si noti che disabilitano anche Avviso C6386 :

__inline _CRT_INSECURE_DEPRECATE_MEMORY(wmemcpy_s) wchar_t * __CRTDECL
wmemcpy(_Out_opt_cap_(_N) wchar_t *_S1, _In_opt_count_(_N) const wchar_t *_S2, _In_ size_t _N)
{
    #pragma warning( push )
    #pragma warning( disable : 4996 6386 )
        return (wchar_t *)memcpy(_S1, _S2, _N*sizeof(wchar_t));
    #pragma warning( pop )
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top