/std
(Określ wersję standardową języka)
Włącz obsługiwane funkcje języka C i C++ z określonej wersji standardu języka C lub C++.
Składnia
/std:c++14
/std:c++17
/std:c++20
/std:c++latest
/std:c11
/std:c17
/std:clatest
Uwagi
Opcje /std
są dostępne w programie Visual Studio 2017 lub nowszym. Są one używane do kontrolowania funkcji standardowych języka programowania ISO C lub C++ specyficznych dla wersji, które są włączone podczas kompilacji kodu. Opcje umożliwiają wyłączenie obsługi niektórych nowych funkcji języka i biblioteki: tych, które mogą spowodować przerwanie istniejącego kodu zgodnego z określoną wersją standardu językowego.
Kompilator języka Microsoft C++ w programie Visual Studio 2017 i nowszych wersjach nie obsługuje trybów standardów języka C++ wcześniejszych niż C++14 (/std:c++14
). Taka obsługa nie jest planowana. Jako niedoskonałe obejście można użyć starszych zestawów narzędzi kompilatora Visual C++, które nie implementują funkcji z nowszych standardów. Aby uzyskać więcej informacji na temat instalowania i używania starszych zestawów narzędzi kompilatora w programie Visual Studio, zobacz Używanie natywnego wielowersyjności w programie Visual Studio do kompilowania starych projektów.
Obsługa standardów języka C++
Opcja /std
w trakcie kompilacji języka C++ może zostać wykryta przy użyciu _MSVC_LANG
makra preprocesora. Aby uzyskać więcej informacji, zobacz Makra preprocesora.
Ważne
Ponieważ jakiś istniejący kod zależy od wartości makra , kompilator MSVC nie zmienia wartości tego makra __cplusplus
199711L
, chyba że jawnie wyrazisz zgodę na ustawienie /Zc:__cplusplus
. Określ /Zc:__cplusplus
i /std
opcję, aby ustawić __cplusplus
odpowiednią wartość.
/std:c++14
Opcja /std:c++14
umożliwia korzystanie ze standardowych funkcji języka C++14 implementowanych przez kompilator MSVC. Ta opcja jest domyślna dla kodu skompilowanego jako C++. Jest ona dostępna od wersji Visual Studio 2015 Update 3.
Ta opcja wyłącza obsługę kompilatora i standardowej biblioteki dla funkcji, które są zmieniane lub nowe w nowszych wersjach standardu językowego. Jednak nie wyłącza niektórych funkcji języka C++17, które zostały już zaimplementowane w poprzednich wersjach kompilatora MSVC. Aby uzyskać więcej informacji, zobacz Zgodność języka Microsoft C/C++. Tabele wskazują, które funkcje języka C++17 są włączone po określeniu ./std:c++14
Następujące funkcje pozostają włączone, gdy /std:c++14
zostanie określona opcja, aby uniknąć zmian powodujących niezgodność dla użytkowników, którzy już podjęli zależności od funkcji dostępnych w programie Visual Studio 2015 Update 2 lub przed nim:
- Reguły dla elementów
auto
z listami nawiasów klamrowych typename
w szablonie template-parameters- Usuwanie trigrafów
- Atrybuty przestrzeni nazw i modułów wyliczania
- Literały znaków u8
/std:c++17
Opcja /std:c++17
umożliwia korzystanie ze standardowych funkcji i zachowania języka C++17. Umożliwia pełny zestaw funkcji języka C++17 implementowanych przez kompilator MSVC. Ta opcja wyłącza obsługę kompilatora i standardowej biblioteki dla funkcji, które są nowe lub zmienione po języku C++17. W szczególności wyłącza zmiany po C++17 w standardzie C++ i wersjach roboczej wersji roboczej. Nie wyłącza aktualizacji usterek wstecznych standardu C++. Ta opcja jest dostępna od wersji 15.3 programu Visual Studio 2017.
W zależności od wersji lub poziomu aktualizacji kompilatora MSVC funkcje języka C++17 mogą nie być w pełni zaimplementowane lub w pełni zgodne podczas określania /std:c++17
opcji. Aby zapoznać się z omówieniem zgodności języka C++ w języku Visual C++ według wersji, zobacz Zgodność języka Microsoft C/C++.
/std:c++20
Opcja /std:c++20
umożliwia korzystanie z funkcji i zachowania specyficznych dla języka C++20. Dostępne począwszy od programu Visual Studio 2019 w wersji 16.11, umożliwia pełny zestaw funkcji języka C++20 implementowanych przez kompilator MSVC. Należy pamiętać, że program Visual Studio 2022 w wersji 17.0 nie obsługuje std::format
rozszerzeń formatowania języka C++20 <chrono>
oraz fabryk zakresów i adapterów zakresu z <ranges>
powodu /std:c++20
późnych zmian w tych funkcjach natychmiast po opublikowaniu standardu.
Opcja /std:c++20
wyłącza obsługę kompilatora i standardowej biblioteki dla funkcji, które są nowe lub zmienione po języku C++20. W szczególności wyłącza zmiany po C++20 w standardzie C++ i wersjach roboczej wersji roboczej. Nie wyłącza aktualizacji usterek wstecznych standardu C++.
Opcja /std:c++20
włącza standardowy tryb zgodności udostępniany przez /permissive-
usługę , chyba że jawnie zastąpi element ./permissive
/std:c++latest
Opcja /std:c++latest
umożliwia włączenie wszystkich aktualnie wdrożonych funkcji kompilatora i standardowej biblioteki proponowanych dla następnego standardu roboczego, a także niektórych funkcji w toku i eksperymentalnych. Ta opcja jest dostępna od programu Visual Studio 2015 Update 3.
W zależności od wersji kompilatora MSVC lub poziomu aktualizacji, C++17, C++20 lub proponowanych funkcji języka C++23 mogą nie być w pełni zaimplementowane lub w pełni zgodne podczas określania /std:c++latest
opcji. Zalecamy użycie najnowszej wersji programu Visual Studio w celu uzyskania maksymalnej zgodności ze standardami. Aby zapoznać się z omówieniem zgodności języka C++ i biblioteki w języku Visual C++ według wersji, zobacz Zgodność języka Microsoft C/C++.
W wersjach programu Visual Studio 2019 przed wersją 16.11 /std:c++latest
wymagane jest włączenie wszystkich funkcji kompilatora i standardowej biblioteki języka C++20.
Ponieważ program Visual Studio 2019 w wersji 16.8 /std:c++latest
włączył standardowy tryb zgodności udostępniany /permissive-
przez program , chyba że jawnie zastąpi element /permissive
.
Aby uzyskać listę obsługiwanych funkcji języka i biblioteki, zobacz Co nowego dla języka C++ w programie Visual Studio.
Opcja /std:c++latest
nie włącza funkcji chronionych przez /experimental
przełącznik, ale może być wymagana do ich włączenia.
Uwaga
Funkcje kompilatora i biblioteki włączone przez /std:c++latest
program mogą pojawić się w przyszłym standardzie języka C++. Funkcje, które nie zostały zatwierdzone, podlegają zmianom powodującym niezgodność lub usuwaniu bez powiadomienia i są udostępniane zgodnie z zasadami.
Obsługa standardów języka C
Kompilator microsoft C można wywołać za pomocą /TC
opcji lub /Tc
kompilatora. Jest on używany domyślnie dla kodu, który ma .c
rozszerzenie pliku, chyba że zostanie zastąpiony przez /TP
opcję lub /Tp
. Domyślny kompilator języka C (czyli kompilator, gdy /std:c11
lub /std:c17
nie został określony) implementuje interfejs ANSI C89, ale zawiera kilka rozszerzeń firmy Microsoft, z których niektóre są częścią iso C99. Niektóre rozszerzenia firmy Microsoft do C89 można wyłączyć przy użyciu opcji kompilatora /Za
, ale inne pozostają w mocy. Nie można określić ścisłej zgodności C89. Kompilator nie implementuje kilku wymaganych funkcji C99, więc nie można określić zgodności C99.
/std:c11
Opcja /std:c11
umożliwia zgodność ze standardem ISO C11. Jest ona dostępna od wersji 16.8 programu Visual Studio 2019.
/std:c17
Opcja /std:c17
umożliwia zgodność ze standardem ISO C17. Jest ona dostępna od wersji 16.8 programu Visual Studio 2019.
Ponieważ nowy preprocesor jest potrzebny do obsługi tych standardów, /std:c11
opcje kompilatora i /std:c17
ustawiają /Zc:preprocessor
opcję automatycznie. Jeśli chcesz użyć tradycyjnego (starszego) preprocesora dla C11 lub C17, musisz jawnie ustawić opcję kompilatora /Zc:preprocessor-
. /Zc:preprocessor-
Ustawienie opcji może prowadzić do nieoczekiwanego zachowania i nie jest zalecane.
Uwaga
W momencie wydania i za pośrednictwem programu Visual Studio 2019 w wersji 16.10 biblioteki Windows SDK i UCRT zainstalowane przez program Visual Studio nie obsługują jeszcze kodu C11 i C17. Wymagana jest zaktualizowana wersja zestawu Windows SDK i narzędzia UCRT. Aby uzyskać więcej informacji i instrukcji instalacji, zobacz Instalowanie obsługi C11 i C17 w programie Visual Studio.
W przypadku określenia /std:c11
parametru lub /std:c17
program MSVC obsługuje wszystkie funkcje C11 i C17 wymagane przez standardy. Opcje kompilatora /std:c11
i /std:c17
umożliwiają obsługę tych funkcji:
_Noreturn
i <stdnoreturn.h>_Alignas
i_Alignof
<stdalign.h>_Generic
i <tgmath.h>
Środowisko IDE używa ustawień języka C dla funkcji IntelliSense i wyróżniania kodu, gdy pliki źródłowe mają .c
rozszerzenie pliku lub gdy określisz /TC
opcję lub /Tc
kompilatora. Obecnie funkcja IntelliSense w języku C wyróżnia słowa kluczowe , , i , ale nie równoważne makra zdefiniowane w nagłówkach standardowych: alignas
, , alignof
noreturn
i static_assert
._Static_assert
_Noreturn
_Alignof
_Alignas
Ponieważ C17 jest w dużej mierze wydanie poprawki błędów ISO C11, obsługa MSVC dla C11 zawiera już wszystkie odpowiednie raporty o wadach. Nie ma różnic między wersjami C11 i C17 z wyjątkiem makra __STDC_VERSION__
. Rozszerza się na 201112L
C11 i 201710L
C17.
Kompilator nie obsługuje większości opcjonalnych funkcji ISO C11. Kilka z tych opcjonalnych funkcji C11 były wymagane funkcje C99, które MSVC nie zostały zaimplementowane ze względów architektury. Makra testów funkcji, takie jak __STDC_NO_VLA__
wykrywanie poziomów obsługi kompilatora dla poszczególnych funkcji, można użyć. Aby uzyskać więcej informacji na temat wstępnie zdefiniowanych makr specyficznych dla języka C, zobacz Wstępnie zdefiniowane makra.
Nie ma zgodnej obsługi liczb wielowątków, niepodzielnych lub złożonych.
aligned_alloc
brak obsługi z powodu implementacji stert systemu Windows. Alternatywą jest użycie polecenia_aligned_malloc
.Raport o wadach 400 jest obecnie nieimplementowany,
realloc
ponieważ ta zmiana spowoduje przerwanie ABI.Obsługa tablicy o zmiennej długości (VLA) nie jest planowana. Wektory VLAN zapewniają wektory ataków porównywalne z
gets
, które są przestarzałe i planowane do usunięcia.
/std:clatest
Opcja /std:clatest
zachowuje się jak /std:c++latest
przełącznik dla kompilatora języka C++. Przełącznik włącza wszystkie obecnie zaimplementowane funkcje kompilatora i biblioteki standardowej proponowane dla następnego standardu C, a także niektóre funkcje w toku i eksperymentalne.
Aby uzyskać więcej informacji, zobacz sekcję Funkcje biblioteki standardowej języka C/C++ firmy Microsoft.
Aby ustawić tę opcję kompilatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać więcej informacji, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilacji w programie Visual Studio).
Wybierz stronę właściwości Właściwości>konfiguracji C/C++>Language.
W języku C++ Language Standard (lub dla języka C, C Language Standard) wybierz standard języka do obsługi z kontrolki listy rozwijanej, a następnie wybierz przycisk OK lub Zastosuj, aby zapisać zmiany.
Zobacz też
/Zc:__cplusplus[-]
Opcje kompilatora MSVC
Składnia wiersza polecenia kompilatora MSVC