Sdílet prostřednictvím


/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++23preview
/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++

Zjistí, jestli se během kompilace jazyka C++ projeví možnost /std 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 __cplusplus199711L, 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

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.

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

/std:c++17

Povolí 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

Povolí funkce a chování specifické pro jazyk C++20.

Povolí standardní režim shody poskytovaný /permissive-, pokud explicitně nepřepíše /permissive.

/std:c++23preview

Umožňuje standardní funkce a chování jazyka C++23 verze Preview. K dispozici od sady Visual Studio 2022 verze 17.13 Preview 4. Funkce preview se můžou měnit a nemusí být kompatibilní s ABI napříč verzemi.

Tento přepínač bude odebrán, když je implementovaný přepínač /std:c++23 – v tomto okamžiku budou plně implementovány funkce C++23 a ABI stabilní. Pokud ve vlastnostech projektu jazyk c/C++>jazyk zadáte Preview – ISO C++ 23 Standard (/std:c++preview), automaticky se změní na střední /std:c++23 po implementaci nového přepínače.

Tento přepínač se liší od /std:c++latest v tom, že umožňuje pouze funkce, které jsou součástí standardu C++23. Nepovoluje experimentální ani probíhající funkce.

/std:c++latest

Umožňuje všechny aktuálně implementované funkce kompilátoru a standardní knihovny navržené v dalším pracovním konceptu ISO C++ 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 z publikovaných standardů C++ nebo navrhovaných funkcí v aktuálním pracovním konceptu jazyka C++ plně implementovány nebo plně vyhovující, když zadáte 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++.

Od verze 16.8 sady Visual Studio 2019 povolila možnost /std:c++latest standardní režim shody poskytovaný /permissive-, pokud explicitně nepřepíšete pomocí /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 as-is bázi.

Podpora standardů jazyka C

Kompilátor Jazyka Microsoft C můžete vyvolat pomocí možnosti nebo/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

Povolí shodu ISO C11. Je k dispozici od sady Visual Studio 2019 verze 16.8.

/std:c17

Povoluje 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/Tc. Technologie IntelliSense v jazyce C v současné době zvýrazňuje klíčová slova , , , a _Alignas, ale ne ekvivalentní makra definovaná ve standardních hlavičkách: _Alignof, _Noreturn, _Static_asserta alignas. alignofnoreturnstatic_assert

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é v dalším konceptu standardu 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