Shoda jazyka Microsoft C/C++ podle verze sady Visual Studio
Článek
Dodržování standardů pro kompilátor Microsoft C/C++ v sadě Visual Studio (MSVC) probíhá. Tady je souhrn shody jazyka a knihovny ISO Standard C a C++ podle verze sady Visual Studio. Každý kompilátor C++ a název funkce standardní knihovny má odkaz na dokument návrhu ISO Standard C++, který popisuje tuto funkci, pokud je k dispozici v době publikování. V podporovaném sloupci je uvedena verze sady Visual Studio, ve které se poprvé objevila podpora funkce.
Podrobnější seznam funkcí standardní knihovny a oprav chyb podle verze produktu je k dispozici na stránce s protokolem změn wikiwebu Microsoft STL Na GitHubu.
Skupina dokumentů uvedených společně označuje standardní funkci spolu s jedním nebo více schválenými vylepšeními nebo rozšířeními. Tyto funkce se implementují společně.
Zatím není implementováno . Částečná implementace je neúplná. Další informace najdete v části Poznámky . Visual Studio 2010 podporuje VS 2010. Visual Studio 2013 podporuje VS 2013 . Visual Studio 2015 (RTW) podporuje VS 2015 . VS 2015.2 a VS 2015.3 označují funkce podporované v sadě Visual Studio 2015 Update 2 a Visual Studio 2015 Update 3 v uvedeném pořadí. VS 2017 15.0 Podporováno v sadě Visual Studio 2017 verze 15.0 (RTW). VS 2017 15.3 Podporováno v sadě Visual Studio 2017 verze 15.3. VS 2017 15.5 Podporováno v sadě Visual Studio 2017 verze 15.5. VS 2017 15.7 Podporováno v sadě Visual Studio 2017 verze 15.7. VS 2019 16.0 Podporováno v sadě Visual Studio 2019 verze 16.0 (RTW). VS 2019 16.1 Podporováno v sadě Visual Studio 2019 verze 16.1. VS 2019 16.2 Podporováno v sadě Visual Studio 2019 verze 16.2. VS 2019 16.3 Podporováno v sadě Visual Studio 2019 verze 16.3. VS 2019 16.4 Podporováno v sadě Visual Studio 2019 verze 16.4. VS 2019 16.5 Podporováno v sadě Visual Studio 2019 verze 16.5. VS 2019 16.6 Podporováno v sadě Visual Studio 2019 verze 16.6. VS 2019 16.7 Podporováno v sadě Visual Studio 2019 verze 16.7. VS 2019 16.8 Podporováno v sadě Visual Studio 2019 verze 16.8. VS 2019 16.9 Podporováno v sadě Visual Studio 2019 verze 16.9. VS 2019 16.10 Podporováno v sadě Visual Studio 2019 verze 16.10. VS 2022 17.0 Podporováno v sadě Visual Studio 2022 verze 17.0. VS 2022 17.1 Podporováno v sadě Visual Studio 2022 verze 17.1. VS 2022 17.2 Podporováno v sadě Visual Studio 2022 verze 17.2. VS 2022 17.3 Podporováno v sadě Visual Studio 2022 verze 17.3. VS 2022 17.4 Podporováno v sadě Visual Studio 2022 verze 17.4. VS 2022 17.5 Podporováno v sadě Visual Studio 2022 verze 17.5.
Notes
A V /std:c++14 režimu zůstávají specifikace dynamických výjimek bez omezení a throw() jsou stále považovány za synonymum pro __declspec(nothrow). V jazyce C++17 se specifikace dynamických výjimek většinou odebraly P0003R5, s výjimkou jedné verze: throw() je zastaralá a vyžaduje se, aby se chovala jako synonymum pro noexcept. V /std:c++17 režimu msVC nyní odpovídá standardu tím, že dává throw() stejné chování jako noexcept, to znamená vynucení prostřednictvím ukončení.
Možnost kompilátoru /Zc:noexceptTypes požaduje staré chování __declspec(nothrow). Je pravděpodobné, že throw() se odebere v budoucí verzi jazyka C++. Pro pomoc s migrací kódu v reakci na tyto změny ve standardu a implementaci Microsoftu jsou přidána /std:c++17 nová upozornění kompilátoru pro problémy se specifikací výjimek a /permissive-.
C V sadě Visual Studio 2019 verze 16.6 a novějších verzí kompilátor plně implementuje standardní preprocesor C99 prostřednictvím /Zc:preprocessor této možnosti. (V sadě Visual Studio 2017 verze 15.8 až 16.5 kompilátor podporuje standardní preprocesor C99 prostřednictvím možnosti kompilátoru/experimental:preprocessor.) Tato možnost je ve výchozím nastavení zapnutá, pokud je zadána možnost /std:c11 kompilátoru./std:c17
D Podporováno v části /std:c++14 s potlačitelným upozorněním C4984.
E Implementace stačí k podpoře standardní knihovny C++20. Úplná implementace vyžaduje binární zásadní změnu.
F Funkce se odeberou, když je zadána možnost kompilátoru /std:c++17 nebo novější. Pokud chcete tyto funkce znovu povolit (pro usnadnění přechodu na novější režimy jazyka), použijte tato makra: _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERSa _HAS_UNEXPECTED.
G Knihovna paralelních algoritmů jazyka C++17 je dokončená. Dokončení neznamená, že každý algoritmus je paralelizován v každém případě. Nejdůležitější algoritmy byly paralelizovány. Podpisy zásad spouštění jsou k dispozici i v případě, že implementace ne parallelizuje algoritmy. Centrální interní hlavička <yvals_core.h>obsahuje následující "Parallel Algorithms Notes": C++ umožňuje implementaci paralelních algoritmů jako volání sériových algoritmů. Tato implementace paralelizuje několik běžných volání algoritmů, ale ne všechny.
Tyto algoritmy nezobrazují žádné výrazné zlepšení výkonu paralelismu na cílovém hardwaru. Všechny algoritmy, které pouze kopírují nebo permutují prvky bez větví, jsou obvykle omezeny šířkou pásma paměti:
H Jedná se o zcela novou implementaci, která není kompatibilní s předchozí std::experimental verzí, kterou vyžaduje podpora symlinku, opravy chyb a změny standardního chování. <filesystem> V současné době poskytuje nové std::filesystem i předchozí std::experimental::filesystem. Hlavička <experimental/filesystem> poskytuje pouze starou experimentální implementaci. Očekáváme odebrání experimentální implementace v příští vydané verzi knihovny ABI.
Já Podporuje ho vnitřní funkce kompilátoru.
Jstd::byte je povolená /std:c++17 nebo novější, ale protože může v některých případech kolidovat s hlavičkami sady Windows SDK, má podrobné odhlasované makro. Pokud ho chcete zakázat, definujte _HAS_STD_BYTE ho jako 0.
K MSVC nepodporuje _Complex klíčové slovo ani nativní komplexní typy. Univerzální CRT <complex.h> používá makra specifická pro implementaci k dosažení stejného efektu. Další informace najdete v tématu Podpora komplexní matematiky jazyka C.
L Univerzální CRT neimplementuje modifikátory alternativního O převodu.strftimeE Tyto modifikátory jsou ignorovány (například %Oe se chovají stejně jako %e). Modifikátory nejsou podporovány podkladovými rozhraními API národního prostředí.
M Univerzální CRT neimplementuje C11 aligned_alloc, ale poskytuje _aligned_malloc a _aligned_free. Vzhledem k tomu, že operační systém Windows nepodporuje sladěné přidělení, není pravděpodobné, že by se tato funkce implementovala.
N Deklarace se odebere, ale export funkce zůstane zpětnou kompatibilitou.
O Některé funkce kontroly hranic jsou nekompimentované nebo mají různé podpisy nebo nejsou součástí standardu C11 nebo C17. Tyto funkce jsou bez omezení: abort_handler_s, , ignore_handler_smemset_s, set_constraint_handler_s, snprintf_s, , snwprintf_s, , strerrorlen_s. vsnwprintf_s. Tyto funkce mají různé podpisy: gmtime_s, localtime_s, qsort_s, strtok_s, vsnprintf_s, , . wcstok_s Tyto funkce se ve standardu nezobrazují: clearerr_s, fread_s.
P Podpora byla přidána v sadě Visual Studio 2019 verze 16.10. Podpora pro Clang byla přidána v sadě Visual Studio 2022 verze 17.0.
Q Tím se odebere declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. Dříve tyto funkce neměly žádný vliv.
R Jedná se o běžnou změnu způsobující chybu zdroje. Kód, který měl dříve nedefinované chování za běhu, je nyní odmítnut s chybami kompilátoru.
S Adaptéry vstupního rozsahu a counted_iterator jsou implementovány ve VS 2022 17.0. Plánujeme budoucí aktualizaci sady Visual Studio 2019 verze 16.11, která bude tyto změny zahrnovat.
T<stdatomic.h> je v současné době podporován při kompilaci jako C++ (/std:c++latest). Při kompilaci jako C (/std:c11 a /std:c17) se zatím nepodporuje.
14 Tyto funkce C++17 a C++20 jsou vždy povolené, i když /std:c++14 je zadán (výchozí). Důvodem je buď to, že funkce byla implementována před zavedením /std možností, nebo proto, že podmíněná implementace byla neověrně složitá.
17 Tyto funkce jsou povoleny možností kompilátoru /std:c++17 nebo novější.
20 Ve verzích prostřednictvím sady Visual Studio 2019 verze 16.10 jsou tyto funkce povoleny možností kompilátoru/std:c++latest. Visual Studio 2019 verze 16.11 přidalo možnost kompilátoru /std:c++20 pro povolení těchto funkcí.
20abi Vzhledem k probíhajícím následným pracím na standardu C++20 jsou <format>části <chrono> formátování (které spoléhají) <format>a adaptéry rozsahu a rozsahu továren a rozsahů od <ranges> (vše, co potřebuje view koncept) k dispozici pouze v /std:c++latestrámci . Očekávejte, že tyto funkce budou v souladu /std:c++20 se smlouvou WG21, že nejsou potřeba žádné další změny ABI způsobující chybu. Zbývající části <chrono> a algoritmy, které platí pro rozsahy, jsou povoleny v /std:c++20 sadě Visual Studio 2019 verze 16.11 a novějších verzích.
23 V sadě Visual Studio 2022 verze 17.0 a novější jsou tyto funkce povoleny možností kompilátoru/std:c++latest.
C11 Podpora kompilátoru pro C11 a C17 vyžaduje Visual Studio 2019 verze 16.8 nebo vyšší. Kromě toho, jak je uvedeno, vyžaduje podpora knihovny C11 a C17 build sady Windows SDK 10.0.20211.0 nebo vyšší. Další informace o instalaci podpory pro C11 a C17 najdete v tématu Instalace podpory C11 a C17 v sadě Visual Studio.
DR Tyto funkce jsou povolené ve všech režimech možností kompilátoru C++/std. Standardní výbor C++ přijal tuto změnu jako retroactive Defect Report na C++11 a všechny novější verze.
2104 Podpora knihovny C11 pro tuto funkci vyžaduje sadu Windows SDK build 10.0.20348.0 (verze 2104) nebo vyšší.