Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zgodność ze standardami kompilatora microsoft C/C++ w programie Visual Studio (MSVC) jest w toku. Poniżej przedstawiono podsumowanie zgodności języka ISO Standard C i C++ i biblioteki z wersją programu Visual Studio. Każda nazwa funkcji kompilatora języka C++ i standardowej biblioteki zawiera link do dokumentu propozycji STANDARD C++ ISO, który opisuje tę funkcję, gdy jest dostępny w czasie publikacji. W kolumnie Obsługiwane jest wyświetlana wersja programu Visual Studio, w której po raz pierwszy pojawiła się obsługa funkcji.
Aby uzyskać szczegółowe informacje na temat ulepszeń zgodności, zobacz Ulepszenia zgodności języka C++ w programie Visual Studio. Aby uzyskać listę innych zmian, zobacz Co nowego dla języka Microsoft C++ w programie Visual Studio. Aby uzyskać informacje o zmianach zgodności we wcześniejszych wersjach, zobacz Historia zmian języka Visual C++ i Visual C++ Co nowego w wersji 2003–2015. Aby uzyskać aktualne informacje od zespołu języka C++, odwiedź blog zespołu języka C++.
Note
Między programem Visual Studio 2015, 2017, 2019 i 2022 nie ma zmian powodujących niezgodność binarną. Aby uzyskać więcej informacji, zobacz Zgodność binarna języka C++ między wersjami programu Visual Studio
Funkcje kompilatora języka C++
Funkcje standardowej biblioteki języka C++
Bardziej szczegółowa lista funkcji biblioteki standardowej i poprawek usterek według wersji produktu jest dostępna na stronie dziennika zmian w witrynie Microsoft STL firmy Microsoft w witrynie GitHub.
Aby uzyskać najnowsze informacje na temat ciągłej pracy dotyczącej zgodności, zobacz:
Grupa dokumentów wymienionych razem wskazuje funkcję standardową wraz z co najmniej jednym zatwierdzonym ulepszeniami lub rozszerzeniami. Te funkcje są implementowane razem.
Funkcje biblioteki C Standard
| Feature | Supported |
|---|---|
| Funkcje biblioteki standardowej C99 | Supported |
Alternatywne makra pisowni <iso646.h> |
VS 2015 |
Obsługa <wchar.h> znaków szerokich i <wctype.h> |
VS 2015 |
Złożona obsługa w systemie <complex.h> |
Częściowe w programie VS 2015 K |
Typ ogólnych funkcji matematycznych <tgmath.h> |
VS 2019 16.8 2104 |
Dodatkowe cechy zmiennoprzecinkowe <float.h> |
VS 2015 |
Specyfikatory %Aszesnastkowe printf zmiennoprzecinkowe , %a |
VS 2015 |
Rozszerzone typy liczb całkowitych <inttypes.h>, <stdint.h> |
VS 2015 |
vscanfrodzina w i <stdio.h><wchar.h> |
VS 2015 |
Nowe funkcje matematyczne w programie <math.h> |
VS 2015 |
Leczenie warunków błędów biblioteki matematycznej (math_errhandling) |
VS 2015 |
Dostęp do środowiska zmiennoprzecinkowego <fenv.h> |
VS 2015 |
%lf specyfikator konwersji dla printf |
VS 2015 |
snprintf rodzina funkcji w <stdio.h> |
VS 2015 |
boolean wpisz w <stdbool.h> |
VS 2015 |
va_copy Makro |
VS 2015 |
Dodatkowe strftime specyfikatory konwersji |
Częściowe w programie VS 2015 L |
| Funkcje biblioteki standardowej C11 | Supported |
Specyfikatory wyrównania <stdalign.h> |
VS 2019 16.8 C11, 2104 |
aligned_alloc |
Brak języka M |
Brak specyfikatorów zwracanych <stdnoreturn.h> |
VS 2019 16.8 C11, 2104 |
Obsługa wątków <threads.h> |
yes |
Obsługa niepodzielna <stdatomic.h> |
experimental |
char16_t, char32_t<uchar.h> |
VS 2019 16.8 C11 |
gets() Usunięte |
VS 2019 16.8 C11, N |
gets_s() |
VS 2019 16.8 C11 |
Interfejsy sprawdzania granic (*_s interfejsy API) |
Częściowe w programie VS 2015 C11, O |
fopen
"x" opcja |
VS 2019 16.8 C11 |
| Asercji statycznych | VS 2019 16.8 C11, 2104 |
quick_exit |
VS 2019 16.8 C11 |
<complex.h> Makra |
VS 2019 16.8 C11 |
cechy zmiennoprzecinkowe <float.h> |
VS 2019 16.8 C11 |
Wątki C11 <threads.h> |
VS 2022 17.8 C11 |
Obsługiwane wartości
Nie zaimplementowano jeszcze.
Częściowa implementacja jest niekompletna. Aby uzyskać więcej informacji, zobacz sekcję Uwagi .
Program VS 2010 obsługiwany w programie Visual Studio 2010.
Program VS 2013 obsługiwany w programie Visual Studio 2013.
Program VS 2015 obsługiwany w programie Visual Studio 2015 (RTW).
Programy VS 2015.2 i VS 2015.3 wskazują funkcje obsługiwane odpowiednio w programach Visual Studio 2015 Update 2 i Visual Studio 2015 Update 3.
Program VS 2017 15.0 obsługiwany w programie Visual Studio 2017 w wersji 15.0 (RTW).
Program VS 2017 15.3 obsługiwany w programie Visual Studio 2017 w wersji 15.3.
Program VS 2017 15.5 obsługiwany w programie Visual Studio 2017 w wersji 15.5.
Program VS 2017 15.7 obsługiwany w programie Visual Studio 2017 w wersji 15.7.
Program VS 2019 16.0 obsługiwany w programie Visual Studio 2019 w wersji 16.0 (RTW).
Program VS 2019 16.1 obsługiwany w programie Visual Studio 2019 w wersji 16.1.
Program VS 2019 16.2 obsługiwany w programie Visual Studio 2019 w wersji 16.2.
Program VS 2019 16.3 obsługiwany w programie Visual Studio 2019 w wersji 16.3.
Program VS 2019 16.4 obsługiwany w programie Visual Studio 2019 w wersji 16.4.
Program VS 2019 16.5 obsługiwany w programie Visual Studio 2019 w wersji 16.5.
Program VS 2019 16.6 obsługiwany w programie Visual Studio 2019 w wersji 16.6.
Program VS 2019 16.7 obsługiwany w programie Visual Studio 2019 w wersji 16.7.
Program VS 2019 16.8 obsługiwany w programie Visual Studio 2019 w wersji 16.8.
Program VS 2019 16.9 obsługiwany w programie Visual Studio 2019 w wersji 16.9.
Program VS 2019 16.10 obsługiwany w programie Visual Studio 2019 w wersji 16.10.
Program VS 2022 17.0 obsługiwany w programie Visual Studio 2022 w wersji 17.0.
PROGRAM VS 2022 17.1 obsługiwany w programie Visual Studio 2022 w wersji 17.1.
Program VS 2022 17.2 obsługiwany w programie Visual Studio 2022 w wersji 17.2.
Program VS 2022 17.3 obsługiwany w programie Visual Studio 2022 w wersji 17.3.
Program VS 2022 17.4 obsługiwany w programie Visual Studio 2022 w wersji 17.4.
Program VS 2022 17.5 obsługiwany w programie Visual Studio 2022 w wersji 17.5.
Narzędzia MSVC Build Tools w wersji 14.50 Obsługiwane w programie Visual Studio 2026 18.0 (kompilator MSVC w wersji 19.50) i nowszej.
Notes
W/std:c++14 trybie kompilator nie implementuje specyfikacji wyjątków dynamicznych i traktuje throw() jako synonim __declspec(nothrow). W C++17 P0003R5 usunął większość dynamicznych specyfikacji wyjątków, poza jednym śladem: standard uznał throw() za przestarzały i wymaga, aby zachowywał się jak synonim noexcept. W /std:c++17 trybie MSVC jest teraz zgodny ze standardem, dając throw() takie samo zachowanie jak noexcept, czyli wymuszanie za pośrednictwem zakończenia.
Opcja /Zc:noexceptTypes kompilatora żąda starego zachowania klasy __declspec(nothrow).
throw() Prawdopodobnie zostanie usunięta w przyszłej wersji języka C++. Aby ułatwić migrację kodu w odpowiedzi na te zmiany w implementacji standardu i implementacji firmy Microsoft, nowe ostrzeżenia kompilatora dotyczące problemów ze specyfikacją wyjątków są dodawane w obszarze /std:c++17 i /permissive-.
B Obsługiwane w /permissive- trybie w programie Visual Studio 2017 w wersji 15.7. Aby uzyskać więcej informacji, zobacz Two-phase name lookup support comes to MSVC.
C W programie Visual Studio 2019 w wersji 16.6 lub nowszej kompilator w pełni implementuje standardowy preprocesor C99 za pośrednictwem /Zc:preprocessor opcji . (W programie Visual Studio 2017 w wersji 15.8 do 16.5 kompilator obsługuje standardowy preprocesor C99 za pośrednictwem opcji kompilatora /experimental:preprocessor ). Ta opcja jest domyślnie włączona, gdy opcja /std:c11 kompilatora lub /std:c17 jest określona.
D Obsługiwane w obszarze /std:c++14 z pomijalnym ostrzeżeniem: C4984.
E Implementacja jest wystarczająca do obsługi standardowej biblioteki języka C++20. Kompletna implementacja wymaga zmiany powodującej niezgodność binarną.
F Funkcje usunięte po określeniu opcji kompilatora lub nowszego/std:c++17. Aby ponownie włączyć te funkcje (aby ułatwić przejście do nowszych trybów języka), użyj tych makr: _HAS_AUTO_PTR_ETC, , _HAS_FUNCTION_ALLOCATOR_SUPPORT_HAS_OLD_IOSTREAMS_MEMBERSi _HAS_UNEXPECTED.
G Biblioteka algorytmów równoległych języka C++17 została ukończona. Ukończone nie oznacza, że każdy algorytm jest równoległy w każdym przypadku. Najważniejsze algorytmy są równoległe. Podpisy zasad wykonywania są udostępniane nawet wtedy, gdy implementacja nie wykonuje równoległości algorytmów. Centralny nagłówek <yvals_core.h>wewnętrzny, , zawiera następujące "Parallel Algorithms Notes": C++ umożliwia implementacji implementowanie algorytmów równoległych jako wywołań do algorytmów seryjnych. Ta implementacja zrównalizuje kilka typowych wywołań algorytmów, ale nie wszystkich.
Następujące algorytmy są równoległe:
-
adjacent_difference,adjacent_find,all_of,any_ofcountcount_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
Te algorytmy nie są obecnie równoległe:
- Te algorytmy nie wykazują zauważalnej poprawy wydajności równoległości na sprzęcie docelowym. Wszystkie algorytmy, które tylko kopiują lub permutują elementy bez gałęzi, zwykle mają ograniczoną przepustowość pamięci:
-
copy,copy_n, , ,fillfill_nmovereversereverse_copyrotaterotate_copyshift_leftshift_rightswap_ranges
-
- W przypadku tych algorytmów istnieją wymagania dotyczące równoległości użytkownika, które prawdopodobnie znajdują się w powyższej kategorii:
-
generate,generate_n
-
- Skuteczne równoległość tych algorytmów może być niewykonalne:
-
partial_sort,partial_sort_copy
-
- Te algorytmy nie są jeszcze oceniane. Biblioteka może implementować równoległość w przyszłej wersji:
-
copy_if,includes, ,inplace_mergelexicographical_comparemax_elementmergemin_elementminmax_elementnth_elementpartition_copyremove_copyremove_copy_ifreplace_copyreplace_copy_ifset_symmetric_differenceset_unionstable_partitionuniqueunique_copy
-
H Jest to całkowicie nowa implementacja, niezgodna z poprzednią std::experimental wersją, wymagana przez obsługę linków symlinkowych, poprawki błędów i zmiany w standardowym zachowaniu. Obecnie udostępnia zarówno nowe<filesystem>, std::filesystem jak i poprzednie std::experimental::filesystem. Nagłówek <experimental/filesystem> zawiera tylko starą implementację eksperymentalną. Spodziewaj się usunięcia eksperymentalnej implementacji w następnej wersji bibliotek powodującej niezgodność z architekturą ABI.
Ja Obsługiwane przez funkcję wewnętrzną kompilatora.
Jstd::byte program jest włączony przez /std:c++17 program lub nowszy, ale ponieważ może powodować konflikt z nagłówkami zestawu Windows SDK w niektórych przypadkach, ma szczegółowe makro rezygnacji. Aby ją wyłączyć, zdefiniuj _HAS_STD_BYTE jako 0.
K MSVC nie obsługuje słowa kluczowego _Complex ani natywnych typów złożonych. Uniwersalne CRT <complex.h> używa makr specyficznych dla implementacji, aby osiągnąć ten sam efekt. Aby uzyskać więcej informacji, zobacz Obsługa złożonych obliczeń matematycznych w języku C.
L Technologia Universal CRT nie implementuje modyfikatorów konwersji alternatywnej strftimeE i O . Te modyfikatory są ignorowane (na przykład %Oe zachowuje się tak samo jak %e). Podstawowe interfejsy API ustawień regionalnych nie obsługują modyfikatorów.
M Universal CRT nie implementuje C11aligned_alloc, ale zapewnia _aligned_malloc i _aligned_free. Ponieważ system operacyjny Windows nie obsługuje wyrównanych alokacji, ta funkcja jest mało prawdopodobne, aby została zaimplementowana.
N Deklaracja jest usuwana, ale eksport funkcji pozostaje zgodny z poprzednimi wersjami.
O Niektóre funkcje sprawdzania granic są nieimplementowane lub mają różne podpisy lub nie są częścią standardu C11 lub C17. Te funkcje są nieimplementowane: abort_handler_s, , ignore_handler_s, memset_sset_constraint_handler_s, snprintf_s, snwprintf_s, strerrorlen_s. vsnwprintf_s Te funkcje mają różne podpisy: gmtime_s, , localtime_sqsort_s, strtok_s, vsnprintf_s, wcstok_s. Te funkcje nie są wyświetlane w warstwie Standardowa: clearerr_s, fread_s.
P Dodano obsługę w programie Visual Studio 2019 w wersji 16.10. Dodano obsługę języka Clang w programie Visual Studio 2022 w wersji 17.0.
Q Spowoduje to usunięcie declare_reachable, , undeclare_reachable, declare_no_pointers, undeclare_no_pointers. get_pointer_safety Wcześniej te funkcje nie miały wpływu.
R Jest to powszechna zmiana powodująca niezgodność źródła. Jednak kod, który wcześniej miał niezdefiniowane zachowanie w czasie wykonywania, jest teraz odrzucany z błędami kompilatora.
S Adaptery zakresu wejściowego i counted_iterator są implementowane w programie VS 2022 17.0. Planowana jest przyszła aktualizacja programu Visual Studio 2019 w wersji 16.11 w celu uwzględnienia tych zmian.
T<stdatomic.h> program jest obecnie obsługiwany w przypadku kompilacji jako C++ (/std:c++latest). Nie jest jeszcze obsługiwany podczas kompilowania jako C (/std:c11 i /std:c17)
Rozszerzone typy zmiennoprzecinkowe U to opcjonalna funkcja języka C++23. Ta funkcja nie zostanie zaimplementowana, dopóki standaryzacja języka C++23 nie zostanie sfinalizowana.
V Użyj opcji /source-charset:utf-8 kompilatora i /we4828 traktuj pliki źródłowe jako zakodowane w formacie UTF-8.
14 Te funkcje C++17 i C++20 są zawsze włączone, nawet jeśli /std:c++14 (wartość domyślna) jest określona. Przyczyną jest to, że funkcja została zaimplementowana przed wprowadzeniem /std opcji lub dlatego, że implementacja warunkowa była niezaprzeczalnie złożona.
17 Te funkcje są włączane przez opcję kompilatora lub nowszego/std:c++17.
20 W wersjach za pośrednictwem programu Visual Studio 2019 w wersji 16.10 te funkcje są włączone przez opcję kompilatora/std:c++latest. Program Visual Studio 2019 w wersji 16.11 dodał opcję kompilatora /std:c++20 , aby włączyć te funkcje.
20abi Ze względu na ciągłe prace po wydaniu w standardzie C++20 , <format>części formatowania (które opierają się na <chrono>), oraz fabryki zakresów <format> i adaptery zakresu od <ranges> (wszystko, co wymaga view koncepcji) są dostępne tylko w obszarze /std:c++latest. Spodziewaj się, że te funkcje zostaną /std:c++20 osiągnięte po osiągnięciu porozumienia z usługą WG21, że nie są konieczne żadne dalsze zmiany powodujące niezgodność ABI. Pozostałe części <chrono> algorytmów i stosowane do zakresów są włączone w /std:c++20 ramach opcji kompilatora w programie Visual Studio 2019 w wersji 16.11 lub nowszej.
23 W programie Visual Studio 2022 w wersji 17.0 i nowszej te funkcje są włączone przez opcję kompilatora/std:c++latest.
24 W narzędziach MSVC Build Tools w wersji 14.50 i nowszej (pierwsze wydanie było z programem Visual Studio 2026 w wersji 18.0) te funkcje są dostępne przez opcję kompilatora /std:c++latest.
C11 Obsługa kompilatora C11 i C17 wymaga programu Visual Studio 2019 w wersji 16.8 lub nowszej. Z wyjątkiem tego, że obsługa bibliotek C11 i C17 wymaga zestawu Windows SDK kompilacji 10.0.20211.0 lub nowszej. Aby uzyskać więcej informacji na temat sposobu instalowania obsługi C11 i C17, zobacz Instalowanie obsługi C11 i C17 w programie Visual Studio.
DR Te funkcje są włączone we wszystkich trybach opcji kompilatora języka C++/std. Komitet standardowy języka C++ przyjął tę zmianę jako wsteczny raport o wadach dla języka C++11 i wszystkich nowszych wersji.
2104 Obsługa biblioteki C11 dla tej funkcji wymaga zestawu Windows SDK kompilacji 10.0.20348.0 (wersja 2104) lub nowszej.
Zobacz także
Dokumentacja języka C++
Standardowa biblioteka C++
Ulepszenia zgodności języka C++ w programie Visual Studio
Co nowego w języku Microsoft C++ w programie Visual Studio
Historia zmian programu Visual C++ od 2003 do 2015
Visual C++ — co nowego od roku 2003 do 2015
Blog zespołu języka C++