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.
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.
Podrobnosti o vylepšeních shody najdete v tématu Vylepšení shody jazyka C++ v sadě Visual Studio. Seznam dalších změn najdete v tématu Co je nového pro Microsoft C++ v sadě Visual Studio. Informace o změnách shody v dřívějších verzích najdete v tématu Historie změn jazyka Visual C++ a Novinky visual C++ 2003 až 2015. Aktuální zprávy od týmu C++ najdete na blogu týmu C++.
Note
Mezi sadou Visual Studio 2015, 2017, 2019 a 2022 neexistují žádné binární zásadní změny. Další informace najdete v tématu Binární kompatibilita jazyka C++ mezi verzemi sady Visual Studio.
Funkce kompilátoru C++
Funkce standardní knihovny C++
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.
Nejnovější informace o probíhající práci na dodržování předpisů najdete tady:
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ě.
Funkce standardní knihovny jazyka C
| Feature | Supported |
|---|---|
| Funkce standardní knihovny C99 | Supported |
Alternativní pravopisná makra <iso646.h> |
VS 2015 |
Podpora <wchar.h> širokého znaku a <wctype.h> |
VS 2015 |
Složitá podpora v <complex.h> |
Částečné ve VS 2015 K |
Zadání obecných matematických funkcí <tgmath.h> |
VS 2019 16.8 2104 |
Další charakteristiky s plovoucí desetinou čárkou <float.h> |
VS 2015 |
Specifikátory %Ahexadecimálního float printf , %a |
VS 2015 |
Rozšířené celočíselné typy <inttypes.h>, <stdint.h> |
VS 2015 |
vscanfrodina v <stdio.h><wchar.h> |
VS 2015 |
Nové matematické funkce v <math.h> |
VS 2015 |
Ošetření chybových stavů matematické knihovny (math_errhandling) |
VS 2015 |
Přístup k prostředí s plovoucí desetinou čárkou <fenv.h> |
VS 2015 |
%lf specifikátor převodu pro printf |
VS 2015 |
snprintf řada funkcí v <stdio.h> |
VS 2015 |
boolean zadejte do <stdbool.h> |
VS 2015 |
va_copy makro |
VS 2015 |
Další strftime specifikátory převodu |
Částečné ve VS 2015 L |
| Funkce standardní knihovny C11 | Supported |
Specifikátory zarovnání <stdalign.h> |
VS 2019 16.8 C11, 2104 |
aligned_alloc |
Ne M |
Žádné specifikátory návratu <stdnoreturn.h> |
VS 2019 16.8 C11, 2104 |
Podpora vláken <threads.h> |
yes |
Podpora atomic <stdatomic.h> |
experimental |
char16_t, char32_t<uchar.h> |
VS 2019 16.8 C11 |
gets() odstraněný |
VS 2019 16.8 C11, N |
gets_s() |
VS 2019 16.8 C11 |
Rozhraní pro kontrolu hranic (*_s rozhraní API) |
Částečné ve VS 2015 C11, O |
fopen
"x" možnost |
VS 2019 16.8 C11 |
| Statické aserce | VS 2019 16.8 C11, 2104 |
quick_exit |
VS 2019 16.8 C11 |
<complex.h> makra |
VS 2019 16.8 C11 |
Charakteristiky s plovoucí desetinou čárkou <float.h> |
VS 2019 16.8 C11 |
Vlákna C11 <threads.h> |
VS 2022 17.8 C11 |
Podporované hodnoty
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.
MsVC Build Tools verze 14.50 Podporováno v sadě Visual Studio 2026 18.0 (kompilátor MSVC verze 19.50) a novější.
Notes
V/std:c++14 režimu kompilátor ponechá dynamické specifikace výjimek neimplementované a považuje throw() za synonymum pro __declspec(nothrow). V jazyce C++17 P0003R5 odebral většinu dynamických specifikací výjimek, kromě jedné výjimky: standard označil throw() za zastaralé a vyžaduje, aby se choval 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-.
B Podporováno v /permissive- režimu v sadě Visual Studio 2017 verze 15.7. Další informace najdete na webu Two-phase name lookup support comes to MSVC.
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 jsou 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.
Paralelizují se následující algoritmy:
-
adjacent_difference,adjacent_find,all_of,any_of, ,countcount_ifequalexclusive_scanfindfind_endfind_first_offind_iffind_if_notfor_eachfor_each_ninclusive_scanis_heapis_heap_untilis_partitionedis_sortedis_sorted_untilmismatchnone_ofpartitionreduceremoveremove_ifreplacereplace_ifsearchsearch_nset_differenceset_intersectionsortstable_sorttransformtransform_exclusive_scantransform_inclusive_scantransform_reduce
Tyto algoritmy nejsou momentálně paralelizovány:
- 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:
-
copy,copy_n, , ,fillfill_nmovereversereverse_copyrotaterotate_copyshift_leftshift_rightswap_ranges
-
- Pro tyto algoritmy, které jsou pravděpodobně ve výše uvedené kategorii, existují nejasnosti nad požadavky uživatelského paralelismu:
-
generate,generate_n
-
- Efektivní paralelismus těchto algoritmů může být neproveditelný:
-
partial_sort,partial_sort_copy
-
- Tyto algoritmy se zatím nevyhodnocují. Knihovna může v budoucí verzi implementovat paralelismus:
-
copy_if,includes, ,inplace_mergelexicographical_comparemax_elementmergemin_elementminmax_elementnth_elementpartition_copyremove_copyremove_copy_ifreplace_copyreplace_copy_ifset_symmetric_differenceset_unionstable_partitionuniqueunique_copy
-
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 strftime převodu.EO Tyto modifikátory jsou ignorovány (například %Oe se chovají stejně jako %e). Základní rozhraní API národního prostředí nepodporují modifikátory.
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.
U rozšířené plovoucí čárkové typy jsou volitelnou funkcí C++23. Tato funkce se neimplementuje, dokud se nedokončí standardizace C++23.
V Používá možnosti /source-charset:utf-8 kompilátoru a /we4828 ke zpracování zdrojových souborů jako kódování UTF-8.
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.
24 V nástrojích MSVC Build Tools verze 14.50 a novějších (poprvé dodáváno se sadou Visual Studio 2026 verze 18.0), 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šší.
Viz také
Referenční dokumentace jazyka C++
Standardní knihovna C++
Vylepšení shody C++ se sadou Visual Studio
Co je nového pro Microsoft C++ v sadě Visual Studio
Historie změn v jazyce Visual C++ 2003 až 2015
Novinky Visual C++ 2003–2015
Blog týmu C++