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
Specifikace dynamických výjimek v režimu zůstávají neplementované a throw() jsou stále považovány za synonymum pro __declspec(nothrow)./std:c++14 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 byly 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ích 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 pod /std:c++14 potlačitelným upozorněním , C4984.
E Implementace je dostatečná pro podporu standardní knihovny C++20. Úplná implementace vyžaduje binární zásadní změnu.
Funkce F 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.
Knihovna paralelních algoritmů jazyka G ++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 Toto je zcela nová implementace, nekompatibilní 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.
Podporuje se vnitřní funkce kompilátoru.
Jazyk 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řevodustrftimeE. 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 je odebrána, ale export funkce zůstává pro zpětnou kompatibilitu.
O Některé funkce kontroly hranic jsou nekompplementované 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.
Podpora P 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 Tato funkce odebere declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, , get_pointer_safety. Dříve tyto funkce neměly žádný vliv.
R Toto je běžná změna 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.
Adaptéry vstupního rozsahu S 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.
Jazyk T<stdatomic.h> se v současné době podporuje 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 povoleny, 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í po vydání práce na standardu C++20, <format>formátování částí <chrono> (které spoléhají ) <format>a rozsah továren a adaptérů rozsahu od <ranges> (vše, co potřebuje view koncept) jsou 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 .
Podpora kompilátoru C11 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 povoleny 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.
Podpora knihovny C11 2104 pro tuto funkci vyžaduje build sady Windows SDK 10.0.20348.0 (verze 2104) nebo vyšší.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu: https://aka.ms/ContentUserFeedback.