Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 __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
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é:
-
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
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í:
_Pragma
restrict
-
_Noreturn
a <stdnoreturn.h> -
_Alignas
a_Alignof
<stdalign.h> -
_Generic
a <tgmath.h> _Static_assert
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_assert
a alignas
. alignof
noreturn
static_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
- 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