Condividi tramite


/sdl (Abilita ulteriori controlli di sicurezza)

Abilita i controlli consigliati del ciclo di vita dello sviluppo della sicurezza (SDL). Questi controlli modificano gli avvisi rilevanti per la sicurezza in errori e impostano funzionalità di generazione di codice sicure aggiuntive.

Sintassi

/sdl[-]

Osservazioni:

/sdl abilita un superset dei controlli di sicurezza di base forniti da /GS ed esegue l'override /GS-di . Per impostazione predefinita, /sdl è disattivato. /sdl- disabilita i controlli di sicurezza aggiuntivi.

Controlli in fase di compilazione

/sdl abilita questi avvisi come errori:

Avviso abilitato da /sdl Opzione della riga di comando equivalente Descrizione
C4146 /we4146 Un operatore di sottrazione unario viene applicato a un tipo unsigned, restituendo un risultato unsigned.
C4308 /we4308 Una costante integrale negativa convertita in un tipo unsigned, restituendo un risultato forse privo di significato.
C4532 /we4532 L'uso di continueparole chiave , breako goto in un __finally/finally blocco ha un comportamento indefinito durante la terminazione anomala.
C4533 /we4533 Il codice che inizializza una variabile non verrà eseguito.
C4700 /we4700 Utilizzo di una variabile locale non inizializzata.
C4703 /we4703 Utilizzo di una variabile locale puntatore potenzialmente non inizializzata.
C4789 /we4789 Sovraccarico del buffer quando vengono utilizzate le funzioni specifiche di runtime del linguaggio C (CRT).
C4995 /we4995 Uso di una funzione contrassegnata con pragma deprecated.
C4996 /we4996 Uso di una funzione contrassegnata come deprecated.

controlli di runtime

Quando /sdl è abilitato, il compilatore genera il codice che esegue questi controlli in fase di esecuzione:

  • Abilita la modalità strict del rilevamento dell'overrun del buffer di /GS runtime, equivalente alla compilazione con #pragma strict_gs_check(push, on).

  • Esegue una purificazione limitata del puntatore. Nelle espressioni che non implicano dereferenziazioni e in tipi senza distruttore definito dall'utente, i riferimenti puntatori vengono impostati su un indirizzo non valido dopo una chiamata a delete. Questa purificazione consente di evitare il riutilizzo di riferimenti puntatori non aggiornati.

  • Inizializza i puntatori ai membri della classe. Inizializza automaticamente i membri della classe del tipo di puntatore a nullptr nella creazione di istanze dell'oggetto (prima dell'esecuzione del costruttore). Consente di evitare l'uso di puntatori non inizializzati che il costruttore non inizializza in modo esplicito. L'inizializzazione del puntatore membro generata dal compilatore viene chiamata purché:

    • L'oggetto non viene allocato usando un oggetto personalizzato (definito dall'utente) operator new

    • L'oggetto non viene allocato come parte di una matrice (ad esempio new A[x])

    • La classe non è gestita o importata

    • La classe ha un costruttore predefinito definito dall'utente.

    Per essere inizializzato dalla funzione di inizializzazione della classe generata dal compilatore, un membro deve essere un puntatore e non una proprietà o una costante.

Per altre informazioni, vedere Avvisi, /sdl e miglioramento del rilevamento delle variabili non inizializzate.

Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Selezionare la pagina delle proprietà Proprietà>di configurazione C/C++>Generale.

  3. Impostare la proprietà SDL checks usando il controllo a discesa delle proprietà. Scegliere OK o Applica per salvare le modifiche.

Vedi anche

Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC