/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 continue parole chiave , break o 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
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.
Selezionare la pagina delle proprietà Proprietà>di configurazione C/C++>Generale.
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