Condividi tramite


/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++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++

L'opzione /std in vigore durante una compilazione C++ può essere rilevata tramite la macro del _MSVC_LANG preprocessore. Per altre informazioni, vedere Macro del preprocessore.

Importante

Poiché il codice esistente dipende dal valore della macro __cplusplus , 199711Lil 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
L'opzione /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 si specifica l'opzione /std:c++14 per evitare modifiche di rilievo per gli utenti che hanno già assunto dipendenze dalle funzionalità disponibili in o prima di Visual Studio 2015 Update 2:

/std:c++17
L'opzione /std:c++17 abilita funzionalità e comportamento specifiche 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
L'opzione /std:c++20 abilita funzionalità e comportamento specifiche dello standard C++20. Disponibile a partire da Visual Studio 2019 versione 16.11, abilita il set completo di funzionalità di C++20 implementate dal compilatore MSVC. Si noti che Visual Studio 2022 versione 17.0 non supporta std::format, le estensioni di formattazione C++20 <chrono> e le factory di intervallo e gli adattatori di intervallo da <ranges> sotto /std:c++20 a causa di modifiche di rilievo tardive in tali funzionalità immediatamente dopo la pubblicazione dello standard.

L'opzione /std:c++20 disabilita il supporto del compilatore e della libreria standard per le funzionalità nuove o modificate dopo C++20. Disabilita in modo specifico le modifiche successive a C++20 nello standard C++ e nelle versioni della bozza di lavoro. Non disabilita gli aggiornamenti dei difetti retroattivi dello standard C++.

L'opzione /std:c++20 abilita la modalità di conformità standard fornita da /permissive- a meno che non venga eseguito in modo esplicito l'override con /permissive.

/std:c++latest
L'opzione /std:c++latest abilita tutte le funzionalità del compilatore e della libreria standard attualmente implementate proposte per lo standard bozza successivo, 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, C++17, C++20 o le funzionalità proposte di C++23 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++.

Nelle versioni di Visual Studio 2019 precedenti alla versione 16.11 è /std:c++latest necessario abilitare tutte le funzionalità del compilatore e della libreria standard di C++20.

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 sia esplicitamente sottoposto a 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 che causano interruzioni o alla rimozione senza preavviso e vengono fornite così come sono.

Supporto degli standard C

È possibile richiamare il compilatore Microsoft C usando l'opzione del compilatore o /Tc ./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
L'opzione /std:c11 abilita la conformità ISO C11. È disponibile a partire da Visual Studio 2019 versione 16.8.

/std:c17
L'opzione /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à:

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, _Noreturne _Static_assert, ma non le macro equivalenti definite nelle intestazioni standard: alignas, alignof, noreturne 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 per lo standard C successivo, 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

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

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

  3. 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