/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 Programmiersprache ISO C oder C++ zu steuern, die während der Kompilierung Ihres Codes aktiviert werden. Mit den Optionen können Sie die Unterstützung für bestimmte neue Sprach- und Bibliotheksfunktionen deaktivieren: Funktionen, die ihren vorhandenen Code unterbrechen können, der einer bestimmten Version des Sprachstandards entspricht.

Unterstützung von C++-Standards

Die /std während einer C++-Kompilierung in Kraft tretende 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 standardspezifische C++14-Features, die vom MSVC Compiler implementiert werden. Diese Option ist die Standardeinstellung für Code, der als C++ kompiliert wurde. 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 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 Breaking Changes 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 standardspezifische C++17-Features und -Verhalten. Sie 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 Versionen des Arbeitsentwurfs. Nachträgliche Fehlerupdates des C++-Standards werden nicht 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/C++-Sprachkonformität.

/std:c++20
Die /std:c++20 Option aktiviert standardspezifische C++20-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 von std::format, der C++20-Formatierungserweiterungen <chrono> und der Bereichsfactorys 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 Versionen des Arbeitsentwurfs. Nachträgliche Fehlerupdates des C++-Standards werden nicht deaktiviert.

/std:c++latest
Die /std:c++latest Option aktiviert alle derzeit implementierten Compiler- und Standardbibliotheksfunktionen, die für den nächsten Entwurf des Standards 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 zu verwenden, um die Einhaltung maximaler Standards zu erreichen. 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 Standardbibliotheksfunktionen von C++20 zu aktivieren.

Eine Liste der unterstützten Sprach- und Bibliotheksfunktionen finden Sie unter Neuerungen bei C++ in Visual Studio.

Die /std:c++latest Option aktiviert keine Funktionen, die durch den /experimental Schalter geschützt werden, ist jedoch möglicherweise erforderlich, um sie zu aktivieren.

Hinweis

Die von /std:c++latest aktivierten Compiler- und Bibliotheksfunktionen 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 /TC Compileroption oder /Tc aufrufen. Sie wird standardmäßig für Code verwendet, der über eine .c Dateierweiterung verfügt, es sei denn, er wird durch eine - oder /Tp -/TPOption überschrieben. Der C-Standardcompiler (d. h. der Compiler, wenn /std:c11 oder /std:c17 nicht angegeben ist) 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 wirksam. Es ist nicht möglich, eine strikte 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 die ISO C11-Konformität. Sie ist ab Visual Studio 2019 Version 16.8 verfügbar.

/std:c17
Die /std:c17 Option aktiviert die ISO C17-Konformität. Sie ist ab Visual Studio 2019 Version 16.8 verfügbar.

Da der neue Präprozessor benötigt wird, um diese Standards zu unterstützen, legen die /std:c11 Compileroptionen und /std:c17 die /Zc:preprocessor Option automatisch fest. Wenn Sie den herkömmlichen (Legacy-)Präprozessor 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 bis 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 Unterstützung von C11 und C17 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 Codehervorhebung, wenn Ihre Quelldateien eine .c Dateierweiterung haben oder wenn Sie die /TC Compileroption oder /Tc angeben. Derzeit hebt IntelliSense in C die Schlüsselwörter _Alignas, _Alignof, _Noreturnund _Static_asserthervor, jedoch nicht die entsprechenden Makros, die in den Standardheadern definiert sind: alignas, alignof, noreturnund static_assert.

Da C17 größtenteils eine Fehlerbehebungsversion von ISO C11 ist, enthält 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. Er wird für C11 und 201710L für C17 auf 201112L 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 Architekturgründen nicht implementiert hat. Sie können die Featuretestmakros wie __STDC_NO_VLA__ verwenden, um Compilerunterstützungsebenen für einzelne Features zu erkennen. Weitere Informationen zu C-spezifischen vordefinierten Makros finden Sie unter Vordefinierte Makros.

  • Es gibt keine konforme Multithreading-, atomare oder komplexe Zahlenunterstützung.

  • aligned_alloc-Unterstützung fehlt aufgrund der Windows Heapimplementierungen. Die Alternative ist die Verwendung von _aligned_malloc.

  • Die Unterstützung von reallocDR 400 für ist derzeit nicht implementiert, da diese Änderung die ABI unterbrechen würde.

  • Die Unterstützung von Arrays variabler Länge (VLA) ist nicht geplant. VLAs bieten Angriffsvektoren, die mit vergleichbar sind getsund veraltet sind und entfernt werden sollen.

Weitere Informationen finden Sie im Abschnitt C-Standardbibliotheksfeatures von 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 KonfigurationseigenschaftenC>/C++>-Sprache aus.

  3. Wählen Sie in C++ Language Standard (oder für C, C Language Standard) im Dropdown-Steuerelement den zu unterstützenden Sprachstandard aus, und klicken Sie dann auf OK oder Übernehmen , um die Änderungen zu speichern.

Weitere Informationen

MSVC Compileroptionen
MSVC Compilerbefehlszeilensyntax