/std
(Specificare la versione standard del linguaggio)
Abilitare le funzionalità del linguaggio C e C++ supportate dalla versione specificata dello standard del linguaggio C o C++.
Sintassi
/std:c++14
/std:c++17
/std:c++20
/std:c++23preview
/std:c++latest
/std:c11
/std:c17
/std:clatest
Osservazioni:
Le /std
opzioni sono disponibili in Visual Studio 2017 e versioni successive. Vengono usati per controllare le funzionalità standard del linguaggio di programmazione ISO C o C++ specifiche della versione abilitate durante la compilazione del codice. Le opzioni consentono di disabilitare il supporto per alcune nuove funzionalità di linguaggio e libreria: quelle che potrebbero interrompere il codice esistente conforme a una versione specifica dello standard linguistico.
Il compilatore Microsoft C++ in Visual Studio 2017 e versioni successive non supporta le modalità standard C++ precedenti a C++14 (/std:c++14
). Tale supporto non è pianificato. Come soluzione alternativa imperfetta, è possibile usare set di strumenti del compilatore Visual C++ meno recenti che non implementano funzionalità di standard successivi. Per altre informazioni su come installare e usare set di strumenti del compilatore meno recenti in Visual Studio, vedere Usare multitargeting nativo in Visual Studio per compilare progetti precedenti.
Supporto degli standard C++
Rilevare se l'opzione /std
è attiva durante una compilazione C++ con la macro del preprocessore _MSVC_LANG
. Per altre informazioni, vedere Macro del preprocessore.
Importante
Poiché il codice esistente dipende dal valore della macro __cplusplus
, 199711L
il compilatore MSVC non modifica il valore di questa macro, a meno che non si acconsenta esplicitamente impostando /Zc:__cplusplus
. Specificare /Zc:__cplusplus
e l'opzione /std
da impostare __cplusplus
sul valore appropriato.
/std:c++14
Abilita le funzionalità specifiche dello standard C++14 implementate dal compilatore MSVC. Questa opzione è l'impostazione predefinita per il codice compilato come C++. È disponibile a partire da Visual Studio 2015 Update 3.
Questa opzione disabilita il supporto del compilatore e della libreria standard per le funzionalità modificate o nuove nelle versioni più recenti dello standard del linguaggio. Tuttavia, non disabilita alcune funzionalità di C++17 già implementate nelle versioni precedenti del compilatore MSVC. Per altre informazioni, vedere Conformità al linguaggio Microsoft C/C++. Le tabelle indicano quali funzionalità di C++17 sono abilitate quando si specifica /std:c++14
.
Le funzionalità seguenti rimangono abilitate quando viene specificata l'opzione /std:c++14
per evitare modifiche di rilievo per gli utenti che hanno assunto dipendenze dalle funzionalità disponibili in o prima di Visual Studio 2015 Update 2:The following features remain enabled when the /std:c++14
option is specified to avoid breaking changes for users who took dependencies on features available in or before Visual Studio 2015 Update 2:
-
Regole per
auto
con parentesi graffe -
typename
in template-parameters - Rimozione di trigrammi
- Attributi per spazi dei nomi ed enumeratori
- Valori letterali dei caratteri u8
/std:c++17
Abilita le funzionalità e il comportamento specifici dello standard C++17. Abilita il set completo di funzionalità C++17 implementate dal compilatore MSVC. Questa opzione disabilita il supporto del compilatore e della libreria standard per le funzionalità nuove o modificate dopo C++17. Disabilita in modo specifico le modifiche successive a C++17 nello standard C++ e nelle versioni della bozza di lavoro. Non disabilita gli aggiornamenti dei difetti retroattivi dello standard C++. Questa opzione è disponibile a partire da Visual Studio 2017 versione 15.3.
A seconda della versione del compilatore MSVC o del livello di aggiornamento, le funzionalità di C++17 potrebbero non essere completamente implementate o completamente conformi quando si specifica l'opzione /std:c++17
. Per una panoramica della conformità del linguaggio C++ in Visual C++ in base alla versione di rilascio, vedere Conformità del linguaggio Microsoft C/C++.
/std:c++20
Abilita le funzionalità e il comportamento specifici dello standard C++20.
Abilita la modalità di conformità standard fornita da /permissive-
a meno che non venga eseguito esplicitamente l'override con /permissive
.
/std:c++23preview
Abilita le funzionalità e il comportamento specifici dello standard C++23 in anteprima. Disponibile a partire da Visual Studio 2022 versione 17.13 Preview 4. Le funzionalità di anteprima possono cambiare e potrebbero non essere compatibili con ABI tra le versioni.
Questa opzione verrà rimossa quando l'opzione /std:c++23
viene implementata, a questo punto le funzionalità di C++23 verranno completamente implementate e stabili ABI. Se nelle proprietà del progetto C/C++>Language si specifica Preview - ISO C++ 23 Standard (/std:c++preview), verrà automaticamente modificato in modo da indicare /std:c++23
dopo l'implementazione del nuovo commutatore.
Questa opzione è diversa da /std:c++latest
in quanto abilita solo le funzionalità che fanno parte dello standard C++23. Non abilita funzionalità sperimentali o in corso.
/std:c++latest
Abilita tutte le funzionalità del compilatore e della libreria standard attualmente implementate proposte nella prossima bozza di lavoro ISO C++, nonché alcune funzionalità in corso e sperimentali. Questa opzione è disponibile a partire da Visual Studio 2015 Update 3.
A seconda della versione del compilatore MSVC o del livello di aggiornamento, le funzionalità degli standard C++ pubblicati o delle funzionalità proposte nella bozza di lavoro C++ corrente potrebbero non essere completamente implementate o completamente conformi quando si specifica l'opzione /std:c++latest
. È consigliabile usare la versione più recente di Visual Studio per la conformità massima agli standard. Per una panoramica della conformità del linguaggio e della libreria C++ in Visual C++ in base alla versione di rilascio, vedere Conformità del linguaggio Microsoft C/C++.
A partire da Visual Studio 2019 versione 16.8, l'opzione /std:c++latest
ha abilitato la modalità di conformità standard fornita da /permissive-
a meno che non venga eseguito esplicitamente l'override con /permissive
.
Per un elenco delle funzionalità di linguaggio e libreria supportate, vedere Novità per C++ in Visual Studio.
L'opzione /std:c++latest
non abilita le funzionalità protette dall'opzione /experimental
, ma potrebbe essere necessaria per abilitarle.
Nota
Le funzionalità del compilatore e della libreria abilitate da /std:c++latest
possono essere visualizzate in un futuro standard C++. Le funzionalità che non sono state approvate sono soggette a modifiche o rimozione di rilievo senza preavviso e vengono fornite su base as-is.
Supporto degli standard C
È possibile richiamare il compilatore Microsoft C usando l'opzione del /Tc
. Viene usato per impostazione predefinita per il codice con estensione di .c
file, a meno che non venga sottoposto a override da un'opzione /TP
o /Tp
. Il compilatore C predefinito (ovvero il compilatore quando /std:c11
o /std:c17
non è specificato) implementa ANSI C89, ma include diverse estensioni Microsoft, alcune delle quali fanno parte di ISO C99. Alcune estensioni Microsoft per C89 possono essere disabilitate usando l'opzione del /Za
compilatore, ma altre rimangono effettive. Non è possibile specificare una rigorosa conformità C89. Il compilatore non implementa diverse funzionalità necessarie di C99, quindi non è possibile specificare la conformità C99.
/std:c11
Abilita la conformità ISO C11. È disponibile a partire da Visual Studio 2019 versione 16.8.
/std:c17
Abilita la conformità ISO C17. È disponibile a partire da Visual Studio 2019 versione 16.8.
Poiché il nuovo preprocessore è necessario per supportare questi standard, le opzioni del /std:c11
compilatore e /std:c17
impostano automaticamente l'opzione /Zc:preprocessor
. Se si vuole usare il preprocessore tradizionale (legacy) per C11 o C17, è necessario impostare l'opzione del /Zc:preprocessor-
compilatore in modo esplicito. L'impostazione dell'opzione /Zc:preprocessor-
può causare comportamenti imprevisti e non è consigliata.
Nota
Al momento del rilascio e tramite Visual Studio 2019 versione 16.10, le librerie Di Windows SDK e UCRT installate da Visual Studio non supportano ancora il codice C11 e C17. È necessaria una versione aggiornata di Windows SDK e UCRT. Per altre informazioni e istruzioni di installazione, vedere Installare il supporto C11 e C17 in Visual Studio.
Quando si specifica /std:c11
o /std:c17
, MSVC supporta tutte le funzionalità di C11 e C17 richieste dagli standard. Le opzioni del /std:c11
compilatore e /std:c17
abilitano il supporto per queste funzionalità:
_Pragma
restrict
-
_Noreturn
e <stdnoreturn.h> -
_Alignas
e_Alignof
<stdalign.h> -
_Generic
e <tgmath.h> _Static_assert
L'IDE usa le impostazioni C per IntelliSense e l'evidenziazione del codice quando i file di origine hanno un'estensione .c
di file o quando si specifica l'opzione del /TC
compilatore o /Tc
. Attualmente, IntelliSense in C evidenzia le parole chiave _Alignas
, _Alignof
, _Noreturn
e _Static_assert
, ma non le macro equivalenti definite nelle intestazioni standard: alignas
, alignof
, noreturn
e static_assert
.
Poiché C17 è in gran parte una versione di correzione di bug di ISO C11, il supporto MSVC per C11 include già tutti i report di difetto pertinenti. Non esistono differenze tra le versioni C11 e C17, ad eccezione della __STDC_VERSION__
macro. Si espande a 201112L
per C11 e 201710L
per C17.
Il compilatore non supporta la maggior parte delle funzionalità facoltative di ISO C11. Alcune di queste funzionalità facoltative di C11 sono state necessarie funzionalità di C99 che MSVC non ha implementato per motivi di architettura. È possibile usare le macro di test delle funzionalità, __STDC_NO_VLA__
ad esempio per rilevare i livelli di supporto del compilatore per le singole funzionalità. Per altre informazioni sulle macro predefinite specifiche di C, vedere Macro predefinite.
Non è disponibile alcun supporto per il multithreading, l'atomico o il numero complesso.
aligned_alloc
manca il supporto, a causa dell'implementazione dell'heap di Windows. L'alternativa consiste nell'usare_aligned_malloc
.La segnalazione dei difetti 400 supporta attualmente non è implementata perché
realloc
questa modifica interrompe l'ABI.Il supporto della matrice di lunghezza variabile (VLA) non è pianificato. I VLA forniscono vettori di attacco simili a
gets
, deprecati e pianificati per la rimozione.
/std:clatest
L'opzione /std:clatest
si comporta come l'opzione /std:c++latest
per il compilatore C++. L'opzione abilita tutte le funzionalità del compilatore e della libreria standard attualmente implementate proposte nel prossimo standard C, nonché alcune funzionalità in corso e sperimentali.
Per altre informazioni, vedere la sezione Relativa alle funzionalità della libreria standard C di Microsoft C/C++.
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
- Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per altre informazioni, vedere Impostare il compilatore e le proprietà di compilazione.
- Selezionare la >>Language.
- In C++ Language Standard (o per C, C Language Standard), scegliere lo standard del linguaggio da supportare dal controllo a discesa, quindi scegliere OK o Applica per salvare le modifiche.
Vedi anche
/Zc:__cplusplus[-]
Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC