Freigeben über


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

/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::formatwerden.

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 /permissiveauß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 /permissiveauß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:

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

  1. Ö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).

  2. Navigieren Sie zur Eigenschaftenseite Konfigurationseigenschaften>C/C++>Sprache.

  3. 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