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

/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::formatC++20 <chrono> und der Bereichsfabriken und Bereichsadapter von <ranges>. Diese Features sind weiterhin nur unter /std:c++latestverfü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:c17angeben/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:

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, , _Noreturnund _Static_asserthervor, aber nicht die entsprechenden Makros, die in den Standardheadern definiert sind: alignas, alignof, noreturnund 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 reallocFehlerberichts 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

  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. Wählen Sie die Eigenschaftenseite Konfigurationseigenschaften>C/C++>Language aus.

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