Dela via


/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 __cplusplus199711Lä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:

/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:c17stö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:

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, _Noreturnoch _Static_assert, men inte motsvarande makron som definierats i standardrubrikerna: alignas, alignof, noreturnoch 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

  1. Öppna dialogrutan egenskapssidor för projektet. Mer information finns i Ange C++-kompilator- och byggegenskaper i Visual Studio.
  2. Välj egenskapssidan Konfigurationsegenskaper>C/C++>Language.
  3. 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