Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Schakel ondersteunde C- en C++-taalfuncties in op basis van de opgegeven versie van de C- of C++-taalstandaard.
Syntaxis
/std:c++14
/std:c++17
/std:c++20
/std:c++23preview
/std:c++latest
/std:c11
/std:c17
/std:clatest
Opmerkingen
De /std opties zijn beschikbaar in Visual Studio 2017 en hoger. Ze worden gebruikt om de standaardfuncties voor iso-C- of C++-programmeertalen te beheren die zijn ingeschakeld tijdens het compileren van uw code. Met de opties kunt u ondersteuning uitschakelen voor bepaalde nieuwe taal- en bibliotheekfuncties: functies die uw bestaande code kunnen verbreken die voldoet aan een bepaalde versie van de taalstandaard.
De Microsoft C++-compiler in Visual Studio 2017 en nieuwere versies biedt geen ondersteuning voor C++-standaardenmodi ouder dan C++14 (/std:c++14). Dergelijke ondersteuning is niet gepland. Als onvolkomen tijdelijke oplossing is het mogelijk om oudere Visual C++-compilerhulpprogramma's te gebruiken die geen functies van latere standaarden hebben geïmplementeerd. Zie Systeemeigen multi-targeting gebruiken in Visual Studio om oude projecten te bouwenvoor meer informatie over het installeren en gebruiken van oudere compilerhulpprogramma's in Visual Studio.
Ondersteuning voor C++-standaarden
Detecteren of de optie /std van kracht is tijdens een C++-compilatie met de _MSVC_LANG preprocessormacro. Zie Macro's voorafvoor meer informatie.
Belangrijk
Omdat sommige bestaande code afhankelijk is van de waarde van de macro __cplusplus wordt 199711L, wordt de waarde van deze macro niet gewijzigd door de MSVC-compiler, tenzij u zich expliciet aanmeldt door /Zc:__cplusplusin te stellen. Geef /Zc:__cplusplus en de optie /std op om __cplusplus in te stellen op de juiste waarde.
/std:c++14
Hiermee schakelt u C++14 standaardspecifieke functies in die zijn geïmplementeerd door de MSVC-compiler. Deze optie is de standaardinstelling voor code die is gecompileerd als C++. Deze is beschikbaar vanaf Visual Studio 2015 Update 3.
Met deze optie wordt de ondersteuning van compilers en standaardbibliotheken uitgeschakeld voor functies die zijn gewijzigd of nieuw zijn in recentere versies van de taalstandaard. Sommige C++17-functies die al in eerdere versies van de MSVC-compiler zijn geïmplementeerd, worden echter niet uitgeschakeld. Zie Microsoft C/C++-taalconformancevoor meer informatie. De tabellen geven aan welke C++17-functies zijn ingeschakeld wanneer u /std:c++14opgeeft.
De volgende functies blijven ingeschakeld wanneer de optie /std:c++14 is opgegeven om belangrijke wijzigingen te voorkomen voor gebruikers die afhankelijk zijn van functies die beschikbaar zijn in of vóór Visual Studio 2015 Update 2:
-
Regels voor
automet accolades -
typenamein sjabloonsjabloonparameters - Trigraphs verwijderen
- kenmerken voor naamruimten en opsommingen
- letterlijke u8-tekens
/std:c++17
Hiermee schakelt u C++17 standaardfuncties en -gedrag in. Hiermee wordt de volledige set C++17-functies ingeschakeld die zijn geïmplementeerd door de MSVC-compiler. Met deze optie schakelt u de ondersteuning voor compiler en standaardbibliotheek uit voor functies die nieuw of gewijzigd zijn na C++17. Hiermee worden wijzigingen na C++17 specifiek uitgeschakeld in de C++-standaard en versies van het werkconcept. Er worden geen updates voor terugwerkende defecten van de C++ Standard uitgeschakeld. Deze optie is beschikbaar vanaf Visual Studio 2017 versie 15.3.
Afhankelijk van de MSVC-compilerversie of het updateniveau zijn C++17-functies mogelijk niet volledig geïmplementeerd of volledig conform wanneer u de optie /std:c++17 opgeeft. Zie Microsoft C/C++-taalconformancevoor een overzicht van de C++-taalconformance in Visual C++ in Visual C++ per releaseversie.
/std:c++20
Hiermee schakelt u C++20 standaardfuncties en -gedrag in.
Hiermee schakelt u de standaardconformancemodus in die wordt geleverd door /permissive-, tenzij deze expliciet wordt overschreven met /permissive.
/std:c++23preview
Hiermee schakelt u preview C++23 standaardspecifieke functies en gedrag in. Beschikbaar vanaf Visual Studio 2022 versie 17.13 Preview 4. Preview-functies kunnen veranderen en zijn mogelijk niet compatibel met ABI in verschillende versies.
Deze switch wordt verwijderd wanneer de /std:c++23 switch wordt geïmplementeerd, waarbij C++23-functies volledig worden geïmplementeerd en ABI stabiel zijn. Als in projecteigenschappen C/C++>Language u opgeeft Preview - ISO C++ 23 Standard (/std:c++preview), wordt dit automatisch gewijzigd in /std:c++23 zodra de nieuwe switch is geïmplementeerd.
Deze switch verschilt van /std:c++latest omdat deze alleen functies inschakelt die deel uitmaken van de C++23-standaard. Er worden geen experimentele of actieve functies ingeschakeld.
/std:c++latest
Hiermee worden alle momenteel geïmplementeerde compiler- en standaardbibliotheekfuncties ingeschakeld die worden voorgesteld in het volgende ISO C++-werkconcept, evenals enkele actieve en experimentele functies. Deze optie is beschikbaar vanaf Visual Studio 2015 Update 3.
Afhankelijk van de msVC-compilerversie of het updateniveau, zijn functies van gepubliceerde C++-standaarden of voorgestelde functies in het huidige C++-werkconcept mogelijk niet volledig geïmplementeerd of volledig conform wanneer u de optie /std:c++latest opgeeft. U wordt aangeraden de nieuwste versie van Visual Studio te gebruiken voor de naleving van maximale standaarden. Zie Microsoft C/C++-taalconformancevoor een overzicht van de C++-taal- en bibliotheekconformance in Visual C++ in Visual C++ per releaseversie.
Sinds Visual Studio 2019 versie 16.8 heeft de optie /std:c++latest de standaardconformancemodus ingeschakeld die wordt geleverd door /permissive-, tenzij deze expliciet wordt overschreven met /permissive.
Zie Wat is er nieuw voor C++ in Visual Studiovoor een lijst met ondersteunde taal- en bibliotheekfuncties.
De optie /std:c++latest schakelt geen functies in die zijn beveiligd door de /experimental switch, maar is mogelijk vereist om ze in te schakelen.
Notitie
De compiler- en bibliotheekfuncties die door /std:c++latest zijn ingeschakeld, worden mogelijk weergegeven in een toekomstige C++-standaard. Functies die niet zijn goedgekeurd, zijn onderhevig aan belangrijke wijzigingen of verwijdering zonder kennisgeving en worden op as-is basis aangeboden.
Ondersteuning voor C-standaarden
U kunt de Microsoft C-compiler aanroepen met behulp van de optie /TC of /Tc compiler. Deze wordt standaard gebruikt voor code met een .c bestandsextensie, tenzij deze wordt overschreven door een /TP of /Tp optie. De standaard-C-compiler (dat wil gezegd, de compiler wanneer /std:c11 of /std:c17 niet is opgegeven) implementeert ANSI C89, maar bevat verschillende Microsoft-extensies, waarvan sommige deel uitmaken van ISO C99. Sommige Microsoft-extensies voor C89 kunnen worden uitgeschakeld met behulp van de optie /Za compiler, maar andere blijven van kracht. Het is niet mogelijk om strikte C89-conformiteit op te geven. De compiler implementeert geen verschillende vereiste functies van C99, dus het is ook niet mogelijk om C99-conformiteit op te geven.
/std:c11
Maakt iso-C11-conformiteit mogelijk. Het is beschikbaar vanaf Visual Studio 2019 versie 16.8.
/std:c17
Maakt iso-C17-conformiteit mogelijk. Het is beschikbaar vanaf Visual Studio 2019 versie 16.8.
Omdat de nieuwe preprocessor nodig is om deze standaarden te ondersteunen, stellen de /std:c11- en /std:c17 compileropties de optie /Zc:preprocessor automatisch in. Als u de traditionele (verouderde) preprocessor voor C11 of C17 wilt gebruiken, moet u de optie /Zc:preprocessor- compiler expliciet instellen. Het instellen van de optie /Zc:preprocessor- kan leiden tot onverwacht gedrag en wordt niet aanbevolen.
Notitie
Op het moment van release en via Visual Studio 2019 versie 16.10 ondersteunen de Windows SDK- en UCRT-bibliotheken die door Visual Studio zijn geïnstalleerd nog geen C11- en C17-code. Er is een bijgewerkte versie van de Windows SDK en UCRT vereist. Zie C11- en C17-ondersteuning installeren in Visual Studiovoor meer informatie en installatie-instructies.
Wanneer u /std:c11 of /std:c17opgeeft, ondersteunt MSVC alle functies van C11 en C17 die door de standaarden zijn vereist. Met de /std:c11- en /std:c17 compileropties kunt u ondersteuning bieden voor deze functies:
_Pragmarestrict-
_Noreturnen <stdnoreturn.h> -
_Alignas,_Alignofen <stdalign.h> -
_Genericen <tgmath.h> _Static_assert
De IDE gebruikt C-instellingen voor IntelliSense en codemarkeringen wanneer uw bronbestanden een .c bestandsextensie hebben of wanneer u de optie /TC of /Tc compiler opgeeft. Momenteel markeert IntelliSense in C trefwoorden _Alignas, _Alignof, _Noreturnen _Static_assert, maar niet de equivalente macro's die zijn gedefinieerd in de standaardkoppen: alignas, alignof, noreturnen static_assert.
Omdat C17 grotendeels een foutoplossingsrelease van ISO C11 is, bevat MSVC-ondersteuning voor C11 al alle relevante defectrapporten. Er zijn geen verschillen tussen de versies C11 en C17, met uitzondering van de __STDC_VERSION__-macro. Het wordt uitgebreid naar 201112L voor C11 en 201710L voor C17.
De compiler biedt geen ondersteuning voor de meeste optionele functies van ISO C11. Verschillende van deze optionele functies van C11 waren vereiste functies van C99 die MSVC niet om architecturale redenen heeft geïmplementeerd. U kunt de functietestmacro's zoals __STDC_NO_VLA__ gebruiken om compilerondersteuningsniveaus voor afzonderlijke functies te detecteren. Zie Vooraf gedefinieerde macro'svoor meer informatie over C-specifieke vooraf gedefinieerde macro's.
Er is geen ondersteuning voor multithreading, atomische of complexe getallen.
aligned_allocondersteuning ontbreekt vanwege de Windows-heap-implementatie. Het alternatief is om_aligned_mallocte gebruiken.defectrapport 400 ondersteuning is momenteel niet geïmplementeerd voor
reallocomdat deze wijziging de ABI zou verbreken.Ondersteuning voor variabele lengtematrix (VLA) is niet gepland. VLA's bieden aanvalsvectoren die vergelijkbaar zijn met
gets, die afgeschaft en gepland zijn voor verwijdering.
/std:clatest
De /std:clatest optie gedraagt zich als de /std:c++latest switch voor de C++-compiler. De switch maakt alle momenteel geïmplementeerde compiler- en standaardbibliotheekfuncties mogelijk die worden voorgesteld in de volgende concept-C-standaard, evenals enkele actieve en experimentele functies.
Zie de sectie C Standard-bibliotheekfuncties van Microsoft C/C++ taalconformancevoor meer informatie.
Deze compileroptie instellen in de Ontwikkelomgeving van Visual Studio
- Open het dialoogvenster eigenschappenpagina's van het project. Zie C++-compiler instellen en eigenschappen bouwen in Visual Studiovoor meer informatie.
- Selecteer de eigenschappenpagina Configuratie-eigenschappen>C/C++>Language.
- Kies in C++ Language Standard (of voor C, C Language Standard), de taalstandaard die u wilt ondersteunen in de vervolgkeuzelijst en kies vervolgens OK of Pas toe om uw wijzigingen op te slaan.
Zie ook
/Zc:__cplusplus[-]
MSVC-compileropties
opdrachtregelsyntaxis van MSVC-compiler