/std (Určení standardní verze jazyka)

Povolte podporované funkce jazyka C a C++ ze zadané verze jazyka C nebo C++.

Syntaxe

/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17
/std:clatest

Poznámky

Možnosti /std jsou dostupné v sadě Visual Studio 2017 a novějších verzích. Používají se k řízení standardních funkcí programovacího jazyka ISO C nebo C++ specifických pro konkrétní verzi, které jsou povolené při kompilaci kódu. Možnosti umožňují zakázat podporu některých nových funkcí jazyka a knihovny: ty, které můžou narušit stávající kód, který odpovídá konkrétní verzi jazykového standardu.

Kompilátor Microsoft C++ v sadě Visual Studio 2017 a novějších verzích nepodporuje režimy standardů C++ starší než C++14 (/std:c++14). Taková podpora se neplánuje. Jako nedostupné alternativní řešení je možné použít starší sady nástrojů kompilátoru Visual C++, které neimplementovaly funkce z pozdějších standardů. Další informace o instalaci a používání starších sad nástrojů kompilátoru v sadě Visual Studio najdete v tématu Použití nativního cílení na více verzí v sadě Visual Studio k sestavení starých projektů.

Podpora standardů C++

Možnost /std , která se projeví během kompilace jazyka C++, lze zjistit pomocí makra preprocesoru _MSVC_LANG . Další informace naleznete v tématu Makra preprocesoru.

Důležité

Vzhledem k tomu, že některé existující kódy závisí na hodnotě makra __cplusplus 199711L, kompilátor MSVC nezmění hodnotu tohoto makra, pokud se explicitně nepřihlásíte nastavením /Zc:__cplusplus. Zadejte /Zc:__cplusplus a /std možnost, která se má nastavit __cplusplus na odpovídající hodnotu.

/std:c++14
Tato /std:c++14 možnost povolí funkce specifické pro jazyk C++14 implementované kompilátorem MSVC. Tato možnost je výchozí pro kód zkompilovaný jako C++. Je k dispozici od sady Visual Studio 2015 Update 3.

Tato možnost zakáže podporu kompilátoru a standardní knihovny pro funkce, které jsou změněny nebo nové v novějších verzích jazykového standardu. Nezakážuje ale některé funkce C++17, které jsou už v předchozích verzích kompilátoru MSVC implementované. Další informace naleznete v tématu Shoda jazyka Microsoft C/C++. Tabulky označují, které funkce C++17 jsou povoleny při zadání /std:c++14.

Následující funkce zůstanou povolené, /std:c++14 pokud je zadaná možnost, aby se zabránilo zásadním změnám pro uživatele, kteří už provedli závislosti na funkcích dostupných v sadě Visual Studio 2015 Update 2 nebo před tím:

/std:c++17
Tato /std:c++17 možnost umožňuje funkce a chování specifické pro jazyk C++17. Umožňuje úplnou sadu funkcí C++17 implementovaných kompilátorem MSVC. Tato možnost zakáže podporu kompilátoru a standardní knihovny pro nové nebo změněné funkce po C++17. Konkrétně zakáže změny po C++17 ve standardu C++ a verzích pracovního konceptu. Nezakazuje retroaktivní aktualizace vad standardu C++. Tato možnost je dostupná od sady Visual Studio 2017 verze 15.3.

V závislosti na verzi kompilátoru MSVC nebo úrovni aktualizace nemusí být funkce jazyka C++17 plně implementovány nebo plně vyhovující, když zadáte /std:c++17 možnost. Přehled shody jazyka C++ v jazyce Visual C++ podle verze naleznete v tématu Shoda jazyka Microsoft C/C++.

/std:c++20
Tato /std:c++20 možnost umožňuje funkce a chování specifické pro jazyk C++20. Dostupné od sady Visual Studio 2019 verze 16.11 umožňuje úplnou sadu funkcí C++20 implementovaných kompilátorem MSVC. Všimněte si, že Visual Studio 2022 verze 17.0 nepodporuje std::formatrozšíření formátování C++20 <chrono> a adaptéry rozsahů a rozsahů z <ranges> /std:c++20 důvodu pozdních změn v těchto funkcích ihned po publikování standardu.

Tato /std:c++20 možnost zakáže podporu kompilátoru a standardní knihovny pro funkce, které jsou nové nebo změněné po C++20. Konkrétně zakáže změny po C++20 v jazyce C++ Standard a verze pracovního konceptu. Nezakazuje retroaktivní aktualizace vad standardu C++.

Tato /std:c++20 možnost povolí standardní režim shody, který /permissive- poskytuje, pokud explicitně nepřepíše /permissive.

/std:c++latest
Tato /std:c++latest možnost umožňuje všechny aktuálně implementované funkce kompilátoru a standardní knihovny navržené pro další standard konceptu a také některé probíhající a experimentální funkce. Tato možnost je dostupná od sady Visual Studio 2015 Update 3.

V závislosti na verzi kompilátoru MSVC nebo úrovni aktualizace nemusí být funkce C++17, C++20 nebo navrhované funkce C++23 plně implementovány nebo plně v souladu s možností /std:c++latest . Doporučujeme použít nejnovější verzi sady Visual Studio pro dosažení souladu s maximálními standardy. Přehled shody jazyka A knihovny jazyka C++ v jazyce Visual C++ podle verze naleznete v tématu Shoda jazyka Microsoft C/C++.

Ve verzích sady Visual Studio 2019 před verzí 16.11 /std:c++latest je nutné povolit všechny funkce kompilátoru a standardní knihovny jazyka C++20.

Od sady Visual Studio 2019 verze 16.8 tato /std:c++latest možnost povolila standardní režim shody, který /permissive- poskytuje, pokud explicitně nepřepíšete /permissive.

Seznam podporovaných funkcí jazyka a knihoven najdete v tématu Co je nového pro C++ v sadě Visual Studio.

Tato /std:c++latest možnost nepovoluje funkce chráněné přepínačem /experimental , ale může být potřeba je povolit.

Poznámka:

Funkce kompilátoru a knihovny povolené funkcí /std:c++latest se můžou objevit v budoucí normě C++. Funkce, které nebyly schváleny, podléhají zásadním změnám nebo odebrání bez předchozího upozornění a poskytují se tak, jak jsou.

Podpora standardů jazyka C

Kompilátor Jazyka Microsoft C můžete vyvolat pomocí možnosti nebo kompilátoru/TC./Tc Ve výchozím nastavení se používá pro kód, který má příponu .c souboru, pokud ji nepřepíše /TP nebo /Tp možnost. Výchozí kompilátor jazyka C (tj. kompilátor v případě /std:c11 nebo /std:c17 není zadaný) implementuje ANSI C89, ale obsahuje několik rozšíření Microsoftu, z nichž některé jsou součástí ISO C99. Některá rozšíření Microsoftu pro C89 je možné zakázat pomocí možnosti kompilátoru /Za , ale ostatní zůstávají v platnosti. Není možné zadat striktní shodu C89. Kompilátor neimplementuje několik požadovaných funkcí C99, takže není možné ani určit shodu C99.

/std:c11
Tato /std:c11 možnost povolí shodu ISO C11. Je k dispozici od sady Visual Studio 2019 verze 16.8.

/std:c17
Tato /std:c17 možnost povolí shodu ISO C17. Je k dispozici od sady Visual Studio 2019 verze 16.8.

Vzhledem k tomu, že nový preprocesor je nutný pro podporu těchto standardů, možnosti kompilátoru /std:c11 /std:c17 /Zc:preprocessor nastaví tuto možnost automaticky. Pokud chcete pro C11 nebo C17 použít tradiční preprocesor (starší verze), musíte explicitně nastavit možnost kompilátoru /Zc:preprocessor- . /Zc:preprocessor- Nastavení možnosti může vést k neočekávanému chování a nedoporučuje se.

Poznámka:

V době vydání a prostřednictvím sady Visual Studio 2019 verze 16.10 sady Windows SDK a UCRT knihovny nainstalované sadou Visual Studio zatím nepodporují kód C11 a C17. Vyžaduje se aktualizovaná verze sady Windows SDK a UCRT. Další informace a pokyny k instalaci naleznete v tématu Instalace podpory C11 a C17 v sadě Visual Studio.

Když zadáte /std:c11 nebo /std:c17, MSVC podporuje všechny funkce C11 a C17 vyžadované standardy. Možnosti kompilátoru /std:c11 umožňují /std:c17 podporu těchto funkcí:

Integrované vývojové prostředí (IDE) používá nastavení jazyka C pro IntelliSense a zvýraznění kódu, pokud mají zdrojové soubory příponu .c nebo když zadáte možnost nebo /Tcmožnost kompilátoru/TC. Technologie IntelliSense v jazyce C v současné době zvýrazňuje klíčová slova , , , a _Static_assert, ale ne ekvivalentní makra definovaná ve standardních hlavičkách: alignas, alignof, noreturna static_assert. _Noreturn_Alignof_Alignas

Vzhledem k tomu, že C17 je z velké části vydáním opravy chyb ISO C11, podpora MSVC pro C11 již obsahuje všechny relevantní zprávy o vadách. Mezi verzemi C11 a C17 neexistují žádné rozdíly s výjimkou __STDC_VERSION__ makra. Rozbalí se 201112L pro C11 a 201710L pro C17.

Kompilátor nepodporuje většinu volitelných funkcí ISO C11. Některé z těchto volitelných funkcí C11 byly povinné funkce C99, které MSVC z důvodů architektury neimplementoval. Makra testů funkcí, například __STDC_NO_VLA__ k detekci úrovní podpory kompilátoru pro jednotlivé funkce, můžete použít. Další informace o předdefinovanýchmakch

  • Neexistuje žádná podpora vícevláknového, atomového nebo komplexního čísla.

  • aligned_alloc Kvůli implementaci haldy Windows chybí podpora. Alternativou je použití _aligned_malloc.

  • Podpora defect reportu 400 je momentálně nesplementovaná, realloc protože tato změna by přerušila ABI.

  • Podpora pole s proměnnou délkou (VLA) se neplánuje. VLA poskytují vektory útoku srovnatelné s gets, což je zastaralé a plánované pro odebrání.

/std:clatest
Tato /std:clatest možnost se chová jako přepínač kompilátoru jazyka /std:c++latest C++. Přepínač umožňuje všechny aktuálně implementované funkce kompilátoru a standardní knihovny navržené pro další verzi standardu jazyka C a také některé probíhající a experimentální funkce.

Další informace najdete v části Funkce standardní knihovny jazyka C/C++ v souladu s jazykem Microsoft C/C++.

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností projektu. Další informace naleznete v tématu Nastavení kompilátoru jazyka C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností jazyka C/C++>Vlastnosti>konfigurace.

  3. V jazyce C++ Standard (nebo pro jazyk C, Jazyk C) zvolte jazykovou normu, která se má podporovat z rozevíracího ovládacího prvku, a pak zvolte OK nebo Použít pro uložení změn.

Viz také

/Zc:__cplusplus[-]
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC