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 GitHub v části Microsoft STL wiki, Protokol změn.
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 širokých znaků <wchar.h> 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 pohyblivé řádové čárky <float.h> |
VS 2015 |
Specifikátory printf pro hexadecimální float %A, %a |
Visual Studio 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í pro plovoucí desetinnou čárku <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 |
Atomová podpora <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 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 v pohyblivé řádové čárce <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 Je podporováno v aplikaci 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 Podpora je zajištěna ve 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 ve Visual Studio 2019 verze 16.9.
VS 2019 16.10 Podporováno ve 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í vyhovuje standardu tím, že poskytuje throw() stejné chování jako noexcept, to znamená vynucení ukončením.
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 byla pod /std:c++17 a /permissive- přidána nová upozornění kompilátoru týkající se problémů se specifikací výjimek.
B Podporováno v režimu /permissive- 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ší kompilátor plně implementuje standardní preprocesor C99 prostřednictvím volby /Zc:preprocessor. (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 změnu narušující binární kompatibilitu.
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,count,count_if,equal,exclusive_scan,find,find_end,find_first_of,find_if,find_if_not,for_each,for_each_n,inclusive_scan,is_heap,is_heap_until,is_partitioned,is_sorted,is_sorted_until,mismatch,none_of,partition,reduce,remove,remove_if,replace,replace_if,search,search_n,set_difference,set_intersection,sort,stable_sort,transform,transform_exclusive_scan,transform_inclusive_scan,transform_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_merge,lexicographical_compare,max_element,merge,min_element,minmax_element,nth_element,partition_copy,remove_copy,remove_copy_if,replace_copy,replace_copy_if,set_symmetric_difference,set_union,stable_partition,unique,unique_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í. V současné době <filesystem> poskytuje jak nový std::filesystem, tak 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.
I Podporováno vnitřní funkcí kompilátoru.
Jstd::byte je povoleno ve verzích /std:c++17 nebo novějších, ale protože může v některých případech být v konfliktu s hlavičkami sady Windows SDK, existuje jemně-granulované makro pro deaktivaci. 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 odstraní, ale export funkce zůstane pro zpětnou kompatibilitu.
O Některé funkce kontroly hranic jsou nekompimentované nebo mají různé podpisy nebo nejsou součástí standardu C11 nebo C17. Tyto funkce nejsou implementovány: abort_handler_s, ignore_handler_s, memset_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 Visual Studio 2019 ve verzi 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 části <chrono> formátování (které spoléhají na <format>) a továrny rozsahů a adaptéry rozsahů z <ranges> (vše, co potřebuje koncept view) k dispozici pouze v rámci /std:c++latest. Očekávejte tyto funkce pod /std:c++20 poté, co bude dosaženo dohody s WG21, že nejsou potřebné žádné další změny narušující ABI. Zbývající části <chrono> a algoritmy používající rozsahy jsou povoleny v rámci možnosti kompilátoru /std:c++20 ve 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ě případů, kde je toto uvedeno, vyžaduje podpora knihovny C11 a C17 Windows SDK verze 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 zpětně platnou zprávu o vadě pro 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++