/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:
- Pravidla pro
auto
seznamy složených závorek typename
v šabloně parametrů šablony- Odebrání trigrafů
- Atributy pro obory názvů a výčty
- Literály znaků u8
/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::format
rozšíř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í:
_Noreturn
a <stdnoreturn.h>_Alignas
a_Alignof
<stdalign.h>_Generic
a <tgmath.h>
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
mož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
, noreturn
a 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
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.
Vyberte stránku vlastností jazyka C/C++>Vlastnosti>konfigurace.
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