/std
(ange språkstandardversion)
Aktivera C- och C++-språkfunktioner som stöds från den angivna versionen av språkstandarden C eller C++.
Syntax
/std:c++14
/std:c++17
/std:c++20
/std:c++23preview
/std:c++latest
/std:c11
/std:c17
/std:clatest
Anmärkningar
Alternativen /std
finns i Visual Studio 2017 och senare. De används för att styra de versionsspecifika standardfunktionerna för ISO C- eller C++-programmeringsspråk som aktiveras under kompileringen av koden. Med alternativen kan du inaktivera stöd för vissa nya språk- och biblioteksfunktioner: de som kan bryta din befintliga kod som överensstämmer med en viss version av språkstandarden.
Microsoft C++-kompilatorn i Visual Studio 2017 och senare versioner stöder inte C++-standardlägen tidigare än C++14 (/std:c++14
). Sådant stöd är inte planerat. Som en ofullkomlig lösning är det möjligt att använda äldre Visual C++-kompilatorverktyg som inte implementerade funktioner från senare standarder. Mer information om hur du installerar och använder äldre kompilatorverktyg i Visual Studio finns i Använda intern multi-targeting i Visual Studio för att skapa gamla projekt.
Stöd för C++-standarder
Identifiera om alternativet /std
gäller under en C++-kompilering med makrot _MSVC_LANG
förprocessor. Mer information finns i Makron för förprocessor.
Viktig
Eftersom viss befintlig kod beror på värdet för makrot __cplusplus
199711L
ändrar MSVC-kompilatorn inte värdet för makrot om du inte uttryckligen väljer att ange /Zc:__cplusplus
. Ange /Zc:__cplusplus
och alternativet /std
för att ange __cplusplus
till lämpligt värde.
/std:c++14
Aktiverar standardspecifika C++14-funktioner som implementeras av MSVC-kompilatorn. Det här alternativet är standardvärdet för kod som kompileras som C++. Den är tillgänglig från och med Visual Studio 2015 Update 3.
Det här alternativet inaktiverar kompilator- och standardbiblioteksstöd för funktioner som har ändrats eller är nya i nyare versioner av språkstandarden. Det inaktiverar dock inte vissa C++17-funktioner som redan implementerats i tidigare versioner av MSVC-kompilatorn. Mer information finns i Microsoft C/C++-språkefterlevnad. Tabellerna anger vilka C++17-funktioner som är aktiverade när du anger /std:c++14
.
Följande funktioner förblir aktiverade när alternativet /std:c++14
anges för att undvika icke-bakåtkompatibla ändringar för användare som har beroenden för funktioner som är tillgängliga i eller före Visual Studio 2015 Update 2:
-
regler för
auto
med -
typename
i mallmallparametrar - Ta bort trigrafer
- attribut för namnrymder och uppräknare
- u8 teckenliteraler
/std:c++17
Aktiverar standardspecifika funktioner och beteenden för C++17. Den aktiverar den fullständiga uppsättningen C++17-funktioner som implementeras av MSVC-kompilatorn. Det här alternativet inaktiverar kompilator- och standardbiblioteksstöd för funktioner som är nya eller ändrade efter C++17. Den inaktiverar specifikt ändringar efter C++17 i C++ Standard och versioner av arbetsutkastet. Den inaktiverar inte retroaktiva defekta uppdateringar av C++ Standard. Det här alternativet är tillgängligt från och med Visual Studio 2017 version 15.3.
Beroende på MSVC-kompilatorns version eller uppdateringsnivå kanske C++17-funktionerna inte är helt implementerade eller helt överensstämmande när du anger alternativet /std:c++17
. En översikt över språkefterlevnad för C++ i Visual C++ efter versionsversion finns i Microsoft C/C++-språkefterlevnad.
/std:c++20
Aktiverar C++20 standardspecifika funktioner och beteende.
Aktiverar standardefterlevnadsläget som tillhandahålls av /permissive-
om det inte uttryckligen åsidosätts med /permissive
.
/std:c++23preview
Aktiverar förhandsgranskning av C++23 standardspecifika funktioner och beteende. Tillgänglig från och med Visual Studio 2022 version 17.13 Förhandsversion 4. Förhandsgranskningsfunktioner kan ändras och kanske inte är ABI-kompatibla mellan versioner.
Den här växeln tas bort när /std:c++23
-växeln implementeras– då C++23-funktioner implementeras fullständigt och ABI-stabila. Om du i projektegenskaper C/C++>Language anger du Preview – ISO C++ 23 Standard (/std:c++preview)ändras den automatiskt till att betyda /std:c++23
när den nya växeln har implementerats.
Den här växeln skiljer sig från /std:c++latest
eftersom den endast aktiverar funktioner som ingår i C++23-standarden. Den aktiverar inte experimentella eller pågående funktioner.
/std:c++latest
Aktiverar alla för närvarande implementerade kompilator- och standardbiblioteksfunktioner som föreslås i nästa ISO C++-arbetsutkast, samt vissa pågående och experimentella funktioner. Det här alternativet är tillgängligt från och med Visual Studio 2015 Update 3.
Beroende på MSVC-kompilatorns version eller uppdateringsnivå kanske funktioner från publicerade C++-standarder eller föreslagna funktioner i det aktuella C++-arbetsutkastet inte är helt implementerade eller helt överensstämmande när du anger alternativet /std:c++latest
. Vi rekommenderar att du använder den senaste versionen av Visual Studio för maximal standardefterlevnad. En översikt över språk- och biblioteksefterlevnad för C++ i Visual C++ efter versionsversion finns i Microsoft C/C++-språkefterlevnad.
Sedan Visual Studio 2019 version 16.8 har alternativet /std:c++latest
aktiverat standardkonformationsläget som tillhandahålls av /permissive-
om det inte uttryckligen åsidosätts med /permissive
.
En lista över språk- och biblioteksfunktioner som stöds finns i Nyheter för C++ i Visual Studio.
Alternativet /std:c++latest
aktiverar inte funktioner som skyddas av /experimental
växeln, men kan krävas för att aktivera dem.
Not
Kompilator- och biblioteksfunktionerna som aktiveras av /std:c++latest
kan visas i en framtida C++-standard. Funktioner som inte har godkänts kan ändras eller tas bort utan föregående meddelande och tillhandahålls på as-is basis.
Stöd för C-standarder
Du kan anropa Microsoft C-kompilatorn med hjälp av alternativet /TC
eller /Tc
kompilator. Den används som standard för kod som har ett .c
filnamnstillägg, såvida det inte åsidosätts av ett /TP
eller /Tp
alternativ. C-standardkompileraren (dvs. kompilatorn när /std:c11
eller /std:c17
inte anges) implementerar ANSI C89, men innehåller flera Microsoft-tillägg, varav vissa ingår i ISO C99. Vissa Microsoft-tillägg till C89 kan inaktiveras med hjälp av /Za
kompilatoralternativet, men andra förblir i kraft. Det går inte att ange strikt C89-överensstämmelse. Kompilatorn implementerar inte flera nödvändiga funktioner i C99, så det går inte heller att ange C99-överensstämmelse.
/std:c11
Aktiverar ISO C11-överensstämmelse. Den är tillgänglig från och med Visual Studio 2019 version 16.8.
/std:c17
Aktiverar ISO C17-överensstämmelse. Den är tillgänglig från och med Visual Studio 2019 version 16.8.
Eftersom den nya förprocessorn behövs för att stödja dessa standarder anger /std:c11
- och /std:c17
kompilatoralternativen /Zc:preprocessor
alternativet automatiskt. Om du vill använda den traditionella (äldre) förprocessorn för C11 eller C17 måste du uttryckligen ange alternativet /Zc:preprocessor-
kompilator. Att ange alternativet /Zc:preprocessor-
kan leda till oväntat beteende och rekommenderas inte.
Not
Vid tidpunkten för lanseringen och via Visual Studio 2019 version 16.10 har Windows SDK- och UCRT-biblioteken som installerats av Visual Studio ännu inte stöd för C11- och C17-kod. En uppdaterad version av Windows SDK och UCRT krävs. Mer information och installationsinstruktioner finns i Installera C11- och C17-stöd i Visual Studio.
När du anger /std:c11
eller /std:c17
stöder MSVC alla funktioner i C11 och C17 som krävs enligt standarderna. Alternativen /std:c11
och /std:c17
-kompilatorn ger stöd för dessa funktioner:
_Pragma
restrict
-
_Noreturn
och <stdnoreturn.h> -
_Alignas
,_Alignof
och <stdalign.h> -
_Generic
och <tgmath.h> _Static_assert
IDE använder C-inställningar för IntelliSense och kodmarkering när källfilerna har ett .c
filnamnstillägg, eller när du anger alternativet /TC
eller /Tc
kompilator. För närvarande markerar IntelliSense i C nyckelorden _Alignas
, _Alignof
, _Noreturn
och _Static_assert
, men inte motsvarande makron som definierats i standardrubrikerna: alignas
, alignof
, noreturn
och static_assert
.
Eftersom C17 till stor del är en felkorrigeringsversion av ISO C11 innehåller MSVC-stöd för C11 redan alla relevanta defektrapporter. Det finns inga skillnader mellan C11- och C17-versionerna förutom __STDC_VERSION__
makrot. Den expanderar till 201112L
för C11 och 201710L
för C17.
Kompilatorn stöder inte de flesta valfria funktioner i ISO C11. Flera av dessa valfria funktioner i C11 krävdes funktioner i C99 som MSVC inte har implementerat av arkitekturskäl. Du kan använda funktionstestmakronerna, till exempel __STDC_NO_VLA__
för att identifiera stödnivåer för kompilatorn för enskilda funktioner. Mer information om C-specifika fördefinierade makron finns i fördefinierade makron.
Det finns inget stöd för multitrådning, atomiska eller komplexa nummer.
aligned_alloc
support saknas på grund av Windows heap-implementeringen. Alternativet är att använda_aligned_malloc
.Defekt rapport 400 supporten är för närvarande inte implementerad för
realloc
eftersom den här ändringen skulle bryta ABI.Stöd för variabellängdsmatris (VLA) är inte planerat. VLAN tillhandahåller attackvektorer som är jämförbara med
gets
, som är inaktuella och planerade för borttagning.
/std:clatest
Alternativet /std:clatest
fungerar som /std:c++latest
växeln för C++-kompilatorn. Växeln aktiverar alla för närvarande implementerade kompilator- och standardbiblioteksfunktioner som föreslås i nästa utkast till C-standard, samt vissa pågående och experimentella funktioner.
Mer information finns i avsnittet om C Standard-biblioteksfunktioner i Microsoft C/C++-språkefterlevnad.
Ange det här kompilatoralternativet i Visual Studio-utvecklingsmiljön
- Öppna dialogrutan egenskapssidor för projektet. Mer information finns i Ange C++-kompilator- och byggegenskaper i Visual Studio.
- Välj egenskapssidan Konfigurationsegenskaper>C/C++>Language.
- I C++ Language Standard (eller för C, C Language Standard) väljer du språkstandarden som ska stödjas från listrutekontrollen och väljer sedan OK eller Använd för att spara ändringarna.
Se även
/Zc:__cplusplus[-]
MSVC-kompilatoralternativ
kommandoradssyntax för MSVC-kompilatorn