/std
(Festlegen der Standardversion für die Sprache)
Aktivieren Sie unterstützte Features der Programmiersprache C und C++ 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
/std:clatest
Hinweise
Die /std
-Optionen sind in Visual Studio 2017 und höher verfügbar. Sie werden zum Steuern der versionsspezifischen Features gemäß dem ISO C- oder ISO C++-Programmiersprachenstandard verwendet, die während der Kompilierung Ihres Codes aktiviert sind. Die Optionen ermöglichen es Ihnen, die Unterstützung für bestimmte neue Sprach- und Bibliotheksfeatures zu deaktivieren, die Ihren vorhandenen Code stören können, der mit einer bestimmten Version des Sprachstandards kompatibel ist.
Der Microsoft C++-Compiler in Visual Studio 2017 und höher unterstützt keine C++-Standardmodi vor C++14 (/std:c++14
). Diese Unterstützung ist nicht geplant. Als unvollkommene Problemumgehung ist es möglich, ältere Visual C++-Compilertoolsets zu verwenden, die Features aus späteren Standards nicht implementiert haben. Weitere Informationen zum Installieren und Verwenden älterer Compilertoolsets in Visual Studio finden Sie unter Verwenden der Festlegung von Zielversionen in Visual Studio zum Erstellen älterer Projekte .
Unterstützung von C++-Standards
Die während einer C++-Kompilierung wirksame /std
-Option kann mithilfe des Präprozessormakros _MSVC_LANG
bestimmt werden. Weitere Informationen finden Sie unter Präprozessormakros.
Wichtig
Da vorhandener Code teilweise davon abhängt, dass das Makro __cplusplus
den Wert 199711L
hat, ändert der MSVC-Compiler den Wert dieses Makros nur, wenn Sie /Zc:__cplusplus
explizit festlegen. Geben Sie /Zc:__cplusplus
und die Option /std
an, um __cplusplus
auf den entsprechenden Wert festzulegen.
/std:c++14
Die /std:c++14
-Option aktiviert die für den C++14-Standard spezifischen Features, die vom MSVC-Compiler implementiert werden. Diese Option ist die Standardeinstellung für Code, der als C++ kompiliert wird. Sie ist ab Visual Studio 2015 Update 3 verfügbar.
Diese Option deaktiviert die Compiler- und Standardbibliotheksunterstützung für Features, die in neueren Versionen des Sprachstandards geändert wurden oder neu sind. Einige C++17-Features, die bereits in früheren Releases 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 /std:c++14
angeben.
Die folgenden Features bleiben aktiviert, wenn die /std:c++14
-Option angegeben ist, um Breaking Changes für Benutzer zu vermeiden, die bereits Abhängigkeiten von den in Visual Studio 2015 Update 2 oder früheren Versionen verfügbaren Features übernommen haben:
- Regeln für
auto
mit braced-init-list typename
in Template-Template-Parametern- Entfernen von Trigraphen
- Attribute für Namespaces und Enumeratoren
- u8-Zeichenliterale
/std:c++17
Die /std:c++17
-Option aktiviert die für den C++17-Standard spezifischen Features und Verhaltensweisen. Sie aktiviert alle C++17-Features, die vom MSVC-Compiler implementiert werden. Diese Option deaktiviert die Compiler- und Standardbibliotheksunterstützung für Features, die neu sind oder nach C++17 geändert wurden. Sie deaktiviert insbesondere nach C++17 aufgetretene Änderungen im C++-Standard und in Versionen des Arbeitsentwurfs. Es werden keine rückwirkenden Fehlerupdates des C++-Standards deaktiviert. Diese Option ist ab Visual Studio 2017, Version 15.3 verfügbar.
Je nach MSVC-Compilerversion oder Updateebene sind C++17-Features möglicherweise nicht vollständig implementiert oder vollständig konform, 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- bzw. C++-Sprachkonformität.
/std:c++20
Die /std:c++20
-Option aktiviert für den C++20-Standard spezifische Features und Verhaltensweisen. Ab Visual Studio 2019, Version 16.11, ist der vollständige Satz von C++20-Features aktiviert, die vom MSVC-Compiler implementiert werden. Beachten Sie, dass Visual Studio 2022, Version 17.0, die C++20-Formatierungserweiterungen <chrono>
und die Bereichsfabriken und Bereichsadapter /std:c++20
<ranges>
aufgrund verspäteter Änderungen an diesen Features unmittelbar nach der Veröffentlichung des Standards nicht unterstützt std::format
werden.
Die /std:c++20
-Option deaktiviert die Compiler- und Standardbibliotheksunterstützung für Features, die neu sind oder nach C++20 geändert wurden. Sie deaktiviert insbesondere nach C++20 aufgetretene Änderungen im C++-Standard und in Versionen des Arbeitsentwurfs. Es werden keine rückwirkenden Fehlerupdates des C++-Standards deaktiviert.
Die /std:c++20
Option aktiviert den Standardkonformitätsmodus, der bereitgestellt wird /permissive-
, es sei denn, dies wird explizit mit /permissive
außer Kraft gesetzt.
/std:c++latest
Die /std:c++latest
-Option aktiviert alle derzeit implementierten Compiler- und Standardbibliotheksfeatures, die für den nächsten Entwurfsstandard vorgeschlagen werden, sowie einige in Bearbeitung befindliche und experimentelle Features. Diese Option ist ab Visual Studio 2015 Update 3 verfügbar.
Je nach 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 für maximale Standardkonformität zu verwenden. Eine Übersicht über die C++-Sprach- und Bibliothekskonformität in Visual C++ nach Releaseversion finden Sie unter Microsoft C- bzw. C++-Sprachkonformität.
In Versionen von Visual Studio 2019 vor Version 16.11 ist /std:c++latest
erforderlich, um alle Compiler- und Standardbibliotheksfeatures von C++20 zu aktivieren.
Seit Visual Studio 2019, Version 16.8, hat die /std:c++latest
Option den Standardkonformitätsmodus aktiviert, der bereitgestellt /permissive-
wird, es sei denn, dies wird explizit mit /permissive
außer Kraft gesetzt.
Eine Liste der unterstützten Sprach- und Bibliotheksfeatures finden Sie unter Neuerungen bei C++ in Visual Studio.
Die /std:c++latest
-Option aktiviert keine Features, die von der /experimental
-Option geschützt sind, ist aber möglicherweise erforderlich, um sie zu aktivieren.
Hinweis
Die von /std:c++latest
aktivierten 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 mithilfe der Compileroption /TC
oder /Tc
aufrufen. Sie wird standardmäßig für Code verwendet, der eine .c
-Dateierweiterung aufweist, es sei denn, sie wird von einer /TP
- oder /Tp
-Option außer Kraft gesetzt. Der C-Standardcompiler (also 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 Compileroption /Za
deaktiviert werden, andere bleiben jedoch wirksam. Es ist nicht möglich, strenge C89-Konformität anzugeben. Der Compiler implementiert nicht mehrere erforderliche C99-Features, weshalb es auch nicht möglich ist, die C99-Konformität anzugeben.
/std:c11
Die /std:c11
-Option ermöglicht die ISO C11-Konformität. Sie ist ab Visual Studio 2019, Version 16.8 verfügbar.
/std:c17
Die /std:c17
-Option ermöglicht die ISO C17-Konformität. Sie ist ab Visual Studio 2019, Version 16.8 verfügbar.
Da der neue Präprozessor erforderlich ist, um diese Standards zu unterstützen, legen die Compileroptionen /std:c11
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 Compileroption /Zc:preprocessor-
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. Es ist eine aktualisierte Windows SDK- bzw. UCRT-Version erforderlich. Weitere Informationen und Installationsanweisungen finden Sie unter Installieren der Unterstützung für C11 und C17 in Visual Studio.
Wenn Sie /std:c11
oder /std:c17
angeben, unterstützt MSVC alle Features von C11 und C17, die für die Standards erforderlich sind. Die Compileroptionen /std:c11
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 integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) verwendet C-Einstellungen für IntelliSense und Codemarkierungen, wenn Ihre Quelldateien eine .c
-Dateierweiterung aufweisen oder Sie die Compileroption /TC
bzw. /Tc
angeben. IntelliSense in C hebt derzeit die Schlüsselwörter _Alignas
, _Alignof
, _Noreturn
und _Static_assert
hervor, nicht jedoch die in den Standardheadern definierten Makros alignas
, alignof
, noreturn
und static_assert
.
Da C17 größtenteils ein Fehlerkorrekturrelease von ISO C11 ist, enthält die MSVC-Unterstützung für C11 bereits alle relevanten Fehlerberichte. Es gibt keine Unterschiede zwischen den Versionen C11 und C17 (mit Ausnahme des __STDC_VERSION__
-Makros). Für C11 wird es auf 201112L
und für C17 auf 201710L
erweitert.
Der Compiler unterstützt die meisten optionalen Features von ISO C11 nicht. Einige dieser optionalen C11-Features waren erforderliche Features von C99, die MSVC aus Architekturgründen nicht implementiert hat. Sie können die Featuretestmakros wie __STDC_NO_VLA__
verwenden, um Compilerunterstützungsebenen für einzelne Features zu ermitteln. Weitere Informationen zu C-spezifischen vordefinierten Makros finden Sie unter Vordefinierte Makros.
Es gibt keine konforme Unterstützung für das Multithreading sowie atomische oder komplexe Zahlen.
Die
aligned_alloc
-Unterstützung fehlt aufgrund der Windows-Heapimplementierung. Die Alternative besteht in der Verwendung von_aligned_malloc
.Die Fehlerbericht 400-Unterstützung ist derzeit nicht für
realloc
implementiert, da diese Änderung die ABI unterbrechen würde.Die Unterstützung von Arrays mit variabler Länge (Variable Length Array, VLA) ist nicht geplant. VLAs bieten Angriffsvektoren, die mit
gets
vergleichbar sind. Diese Funktionen sind veraltet und sollen entfernt werden.
/std:clatest
Die /std:clatest
-Option verhält sich wie die /std:c++latest
-Option für den C++-Compiler. Die Option ermöglicht alle derzeit implementierten Compiler- und Standardbibliotheksfunktionen, die für den nächsten Entwurf C-Standard vorgeschlagen werden, sowie einige in Bearbeitung befindliche und experimentelle Funktionen.
Weitere Informationen finden Sie unter Microsoft C- bzw. C++-Sprachkonformität im Abschnitt zu den C-Standardbibliotheksfeatures.
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).
Navigieren Sie zur Eigenschaftenseite Konfigurationseigenschaften>C/C++>Sprache.
Wählen Sie unter C++-Sprachstandard (oder C-Sprachstandard für C) in der Dropdownliste den zu unterstützenden Sprachstandard aus, und klicken Sie dann auf OK oder Anwenden, um Ihre Änderungen zu speichern.
Weitere Informationen
/Zc:__cplusplus[-]
MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile