/std
(Standardversion für die Sprache festlegen)
Aktivieren Sie unterstützte C- und C++-Sprachfeatures aus der angegebenen Version des C- oder C++-Sprachstandards.
Syntax
/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17
Bemerkungen
Die /std
Optionen sind in Visual Studio 2017 und höher verfügbar. Sie werden verwendet, um die versionsspezifischen Standardfeatures der ISO C- oder C++-Programmiersprache zu steuern, die während der Kompilierung Ihres Codes aktiviert sind. Mit den Optionen können Sie die Unterstützung für bestimmte neue Sprach- und Bibliotheksfeatures deaktivieren: Solche, die ihren vorhandenen Code, der einer bestimmten Version des Sprachstandards entspricht, unter Umständen unterbrechen.
Der Microsoft C++-Compiler in Visual Studio 2017 und höheren Versionen unterstützt keine C++-Standardmodi vor C++14 (/std:c++14
). Eine solche Unterstützung ist nicht geplant. Als unvollkommene Problemumgehung ist es möglich, ältere Visual C++-Compilertoolsets zu verwenden, die keine Features aus späteren Standards implementiert haben. Weitere Informationen zum Installieren und Verwenden älterer Compilertoolsets in Visual Studio finden Sie unter Verwenden von nativem Multi-Targeting in Visual Studio zum Erstellen alter Projekte.
Unterstützung von C++-Standards
Die /std
während einer C++-Kompilierung verwendete Option kann mithilfe des _MSVC_LANG
Präprozessormakros erkannt werden. Weitere Informationen finden Sie unter Präprozessormakros.
/std:c++14
Die /std:c++14
Option aktiviert C++14-standardspezifische Features, die vom MSVC-Compiler implementiert werden. Diese Option ist die Standardeinstellung für Code, der als C++ kompiliert wurde. Es ist ab Visual Studio 2015 Update 3 verfügbar.
Mit dieser Option wird die Unterstützung von Compilern und Standardbibliotheken für Features deaktiviert, die in neueren Versionen des Sprachstandards geändert oder neu sind. Einige C++17-Features, die bereits in früheren Versionen des MSVC-Compilers implementiert wurden, werden jedoch nicht deaktiviert. Weitere Informationen finden Sie unter Microsoft C/C++-Sprachkonformität. Die Tabellen geben an, welche C++17-Features aktiviert sind, wenn Sie angeben /std:c++14
.
Die folgenden Features bleiben aktiviert, wenn die /std:c++14
Option angegeben wird, um fehlerhafte Änderungen für Benutzer zu vermeiden, die bereits Abhängigkeiten von den in oder vor Visual Studio 2015 Update 2 verfügbaren Features übernommen haben:
- Regeln für
auto
mit braced-init-lists typename
in vorlagenvorlagenparametern- Entfernen von Trigraphen
- Attribute für Namespaces und Enumeratoren
- u8-Zeichenliterale
/std:c++17
Die /std:c++17
Option aktiviert C++17-standardspezifische Features und Verhalten. Es ermöglicht den vollständigen Satz von C++17-Features, die vom MSVC-Compiler implementiert werden. Diese Option deaktiviert die Compiler- und Standardbibliotheksunterstützung für Features, die nach C++17 neu sind oder geändert wurden. Es deaktiviert insbesondere Änderungen nach C++17 im C++-Standard und in den Versionen des Arbeitsentwurfs. Rückwirkende Fehlerupdates des C++-Standards werden nicht deaktiviert. Diese Option ist ab Visual Studio 2017 Version 15.3 verfügbar.
Abhängig von der MSVC-Compilerversion oder Updateebene sind C++17-Features möglicherweise nicht vollständig implementiert oder entsprechen nicht vollständig, wenn Sie die /std:c++17
Option angeben. Eine Übersicht über die C++-Sprachkonformität in Visual C++ nach Releaseversion finden Sie unter Microsoft C/C++-Sprachkonformität.
/std:c++20
Die /std:c++20
Option aktiviert C++20 standardspezifische Features und Verhalten. Ab Visual Studio 2019 Version 16.11 verfügbar, ermöglicht es den vollständigen Satz von C++20-Features, die vom MSVC-Compiler implementiert werden, mit Ausnahme der Formatierungserweiterungen für std::format
C++20 <chrono>
und der Bereichsfabriken und Bereichsadapter von <ranges>
. Diese Features sind weiterhin nur unter /std:c++latest
verfügbar.
Die /std:c++20
Option deaktiviert die Compiler- und Standardbibliotheksunterstützung für Features, die nach C++20 neu sind oder geändert wurden. Es deaktiviert insbesondere Änderungen nach C++20 im C++-Standard und in den Versionen des Arbeitsentwurfs. Rückwirkende Fehlerupdates des C++-Standards werden nicht deaktiviert.
/std:c++latest
Die /std:c++latest
Option ermöglicht alle derzeit implementierten Compiler- und Standardbibliotheksfeatures, die für den nächsten Standardentwurf vorgeschlagen werden, sowie einige in Bearbeitung befindliche und experimentelle Features. Diese Option ist ab Visual Studio 2015 Update 3 verfügbar.
Abhängig von der MSVC-Compilerversion oder Updateebene sind C++17, C++20 oder vorgeschlagene C++23-Features möglicherweise nicht vollständig implementiert oder vollständig konform, wenn Sie die /std:c++latest
Option angeben. Es wird empfohlen, die neueste Version von Visual Studio zu verwenden, um maximale Standardskonformität zu gewährleisten. Eine Übersicht über die C++-Sprach- und Bibliothekskonformität in Visual C++ nach Releaseversion finden Sie unter Microsoft C/C++-Sprachkonformität.
In Versionen von Visual Studio 2019 vor Version 16.11 ist erforderlich, /std:c++latest
um alle Compiler- und Standardbibliotheksfeatures von C++20 zu aktivieren.
Eine Liste der unterstützten Sprach- und Bibliotheksfeatures finden Sie unter Neuerungen für C++ in Visual Studio.
Die /std:c++latest
Option aktiviert keine Features, die durch den /experimental
Switch geschützt werden, aber möglicherweise erforderlich sind, um sie zu aktivieren.
Hinweis
Die von aktivierten /std:c++latest
Compiler- und Bibliotheksfeatures werden möglicherweise in einem zukünftigen C++-Standard angezeigt. Features, die nicht genehmigt wurden, unterliegen Breaking Changes oder der Entfernung ohne Benachrichtigung und werden „wie besehen“ zur Verfügung gestellt.
Unterstützung von C-Standards
Sie können den Microsoft C-Compiler aufrufen, indem Sie die /TC
Compileroption oder /Tc
verwenden. Sie wird standardmäßig für Code mit einer .c
Dateierweiterung verwendet, es sei denn, sie wird von einer /TP
oder - /Tp
Option überschrieben. Der C-Standardcompiler (d. h. der Compiler, wenn /std:c11
oder /std:c17
nicht angegeben wird) implementiert ANSI C89, enthält jedoch mehrere Microsoft-Erweiterungen, von denen einige Teil von ISO C99 sind. Einige Microsoft-Erweiterungen für C89 können mithilfe der /Za
Compileroption deaktiviert werden, andere bleiben jedoch in Kraft. Es ist nicht möglich, strenge C89-Konformität anzugeben. Der Compiler implementiert nicht mehrere erforderliche Features von C99, sodass es auch nicht möglich ist, C99-Konformität anzugeben.
/std:c11
Die /std:c11
Option aktiviert ISO C11-Konformität. Es ist ab Visual Studio 2019 Version 16.8 verfügbar.
/std:c17
Die /std:c17
Option aktiviert ISO C17-Konformität. Es ist ab Visual Studio 2019 Version 16.8 verfügbar.
Da der neue Präprozessor zur Unterstützung dieser Standards benötigt wird, legen die /std:c11
Compileroptionen und /std:c17
die /Zc:preprocessor
Option automatisch fest. Wenn Sie den herkömmlichen Präprozessor (Legacy) für C11 oder C17 verwenden möchten, müssen Sie die /Zc:preprocessor-
Compileroption explizit festlegen. Das Festlegen der /Zc:preprocessor-
Option kann zu unerwartetem Verhalten führen und wird nicht empfohlen.
Hinweis
Zum Zeitpunkt der Veröffentlichung und über Visual Studio 2019 Version 16.10 unterstützen die von Visual Studio installierten Windows SDK- und UCRT-Bibliotheken noch keinen C11- und C17-Code. Eine aktualisierte Version des Windows SDK und UCRT ist erforderlich. Weitere Informationen und Installationsanweisungen finden Sie unter Installieren der C11- und C17-Unterstützung in Visual Studio.
Wenn Sie oder /std:c17
angeben/std:c11
, unterstützt MSVC alle Features von C11 und C17, die für die Standards erforderlich sind. Die /std:c11
Compileroptionen und /std:c17
ermöglichen die Unterstützung für diese Funktionen:
_Noreturn
und <stdnoreturn.h>_Alignas
,_Alignof
und <stdalign.h>_Generic
und <tgmath.h>
Die IDE verwendet C-Einstellungen für IntelliSense und Code zur Hervorhebung, wenn Ihre Quelldateien über eine .c
Dateierweiterung verfügen oder wenn Sie die /TC
Compileroption oder /Tc
angeben. Derzeit hebt IntelliSense in C schlüsselwörter _Alignas
, _Alignof
, , _Noreturn
und _Static_assert
hervor, aber nicht die entsprechenden Makros, die in den Standardheadern definiert sind: alignas
, alignof
, noreturn
und static_assert
.
Da es sich bei C17 größtenteils um eine Fehlerbehebungsversion von ISO C11 handelt, umfasst die MSVC-Unterstützung für C11 bereits alle relevanten Fehlerberichte. Es gibt keine Unterschiede zwischen den Versionen C11 und C17, mit Ausnahme des Makros __STDC_VERSION__
. Sie wird für 201112L
C11 und 201710L
für C17 erweitert.
Der Compiler unterstützt die meisten optionalen Features von ISO C11 nicht. Einige dieser optionalen Features von C11 waren erforderliche Features von C99, die MSVC aus architektonischen Gründen nicht implementiert hat. Sie können die Featuretestmakros verwenden, z __STDC_NO_VLA__
. B. zum Ermitteln von Compilerunterstützungsstufen für einzelne Features. Weitere Informationen zu C-spezifischen vordefinierten Makros finden Sie unter Vordefinierte Makros.
Es gibt keine Unterstützung für konformes Multithreading, atomares oder komplexes Zahlen.
aligned_alloc
Aufgrund der Windows-Heapimplementierung fehlt der Support. Die Alternative besteht darin, zu verwenden_aligned_malloc
.Die Unterstützung des
realloc
Fehlerberichts 400 ist derzeit nicht implementiert, da diese Änderung die ABI unterbrechen würde.Die Unterstützung von Arrays mit variabler Länge (VLA) ist nicht geplant. VLAs bieten Angriffsvektoren vergleichbar mit
gets
, die veraltet sind und für die Entfernung geplant sind.
Weitere Informationen finden Sie im Abschnitt Features der C Standard-Bibliothek unter Microsoft C/C++-Sprachkonformität.
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).
Wählen Sie die Eigenschaftenseite Konfigurationseigenschaften>C/C++>Language aus.
Wählen Sie in C++ Language Standard (oder für C, C Language Standard) den zu unterstützenden Sprachstandard aus dem Dropdownsteuerelement aus, und wählen Sie dann OK oder Anwenden aus, um Ihre Änderungen zu speichern.
Siehe auch
MSVC-Compileroptionen
Befehlszeilensyntax des MSVC-Compilers