Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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++23preview
/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
Ermitteln Sie, ob die option /std
während einer C++-Kompilierung mit dem _MSVC_LANG
Präprozessormakro wirksam ist. 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
Ermöglicht C++14 standardspezifische 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 Option /std:c++14
angegeben wird, um unterbrechungsfähige Änderungen für Benutzer zu vermeiden, die Abhängigkeiten von Features verwendet haben, die in oder vor Visual Studio 2015 Update 2 verfügbar sind:
-
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
Ermöglicht C++17 standardspezifische Features und Verhalten. 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
Ermöglicht C++20 standardspezifische Features und Verhalten.
Aktiviert den von /permissive-
bereitgestellten Standardkonformitätsmodus, es sei denn, es wird explizit mit /permissive
außer Kraft gesetzt.
/std:c++23preview
Ermöglicht die Vorschau von C++23 standardspezifische Features und Verhalten. Verfügbar ab Visual Studio 2022, Version 17.13 Preview 4. Vorschaufeatures können sich ändern und sind möglicherweise nicht mit ABI kompatibel.
Dieser Switch wird entfernt, wenn der /std:c++23
Switch implementiert wird – zu diesem Zeitpunkt werden C++23-Features vollständig implementiert und ABI stable. Wenn in Projekteigenschaften C/C++>Language Sie Preview - ISO C++ 23 Standard (/std:c++preview)angeben, ändert sich dies automatisch in /std:c++23
, sobald die neue Option implementiert wurde.
Dieser Switch unterscheidet sich von /std:c++latest
darin, dass er nur Features ermöglicht, die Teil des C++23-Standards sind. Sie aktiviert keine experimentellen oder laufenden Features.
/std:c++latest
Ermöglicht alle derzeit implementierten Compiler- und Standardbibliotheksfeatures, die im nächsten ISO C++-Arbeitsentwurf 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 werden Features aus veröffentlichten C++-Standards oder vorgeschlagenen Features im aktuellen C++-Arbeitsentwurf möglicherweise nicht vollständig implementiert oder vollständig konform, wenn Sie die Option /std:c++latest
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.
Seit Visual Studio 2019, Version 16.8, hat die option /std:c++latest
den von /permissive-
bereitgestellten Standardkonformitätsmodus aktiviert, 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 unterbrechungsfreier Änderungen oder Entfernungen und werden auf as-is Basis bereitgestellt.
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
Aktiviert die ISO C11-Konformität. Sie ist ab Visual Studio 2019, Version 16.8 verfügbar.
/std:c17
Aktiviert 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:
_Pragma
restrict
-
_Noreturn
und <stdnoreturn.h> -
_Alignas
,_Alignof
und <stdalign.h> -
_Generic
und <tgmath.h> _Static_assert
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. Der Switch ermöglicht alle derzeit implementierten Compiler- und Standardbibliotheksfeatures, die im nächsten C-Standardentwurf vorgeschlagen werden, sowie einige in Bearbeitung befindliche und experimentelle Features.
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