/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++23preview
/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++
Wykryj, czy opcja /std
działa podczas kompilacji języka C++ przy użyciu makra preprocesora _MSVC_LANG
. 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
Włącza funkcje specyficzne dla języka C++14 implementowane 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 po określeniu opcji /std:c++14
, aby uniknąć zmian powodujących niezgodność dla użytkowników, którzy wzię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
Umożliwia korzystanie ze standardowych funkcji i zachowań specyficznych dla 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
Umożliwia korzystanie ze standardowych funkcji i zachowań specyficznych dla języka C++20.
Włącza standardowy tryb zgodności udostępniany przez /permissive-
, chyba że jawnie zastąpiony /permissive
.
/std:c++23preview
Umożliwia korzystanie z wersji zapoznawczej funkcji i zachowania specyficznych dla języka C++23. Dostępne od wersji 17.13 (wersja zapoznawcza 4) programu Visual Studio 2022. Funkcje w wersji zapoznawczej mogą ulec zmianie i mogą nie być zgodne z usługą ABI w różnych wersjach.
Ten przełącznik zostanie usunięty po zaimplementowaniu przełącznika /std:c++23
— w którym momencie funkcje języka C++23 zostaną w pełni zaimplementowane i stabilne ABI. Jeśli we właściwościach projektu C/C++>Language określisz Preview — ISO C++ 23 Standard (/std:c++preview), zostanie ona automatycznie zmieniona na średnią /std:c++23
po zaimplementowaniu nowego przełącznika.
Ten przełącznik różni się od /std:c++latest
, ponieważ włącza tylko funkcje, które są częścią standardu C++23. Nie włącza funkcji eksperymentalnych ani w toku.
/std:c++latest
Włącza wszystkie aktualnie zaimplementowane funkcje kompilatora i biblioteki standardowej proponowane w następnej wersji roboczej ISO C++, a także niektóre funkcje w toku i eksperymentalne. Ta opcja jest dostępna od programu Visual Studio 2015 Update 3.
W zależności od wersji kompilatora MSVC lub poziomu aktualizacji funkcje z opublikowanych standardów języka C++ lub proponowanych funkcji w bieżącej wersji roboczej języka C++ mogą nie być w pełni zaimplementowane lub w pełni zgodne podczas określania opcji /std:c++latest
. 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++.
Ponieważ program Visual Studio 2019 w wersji 16.8, opcja /std:c++latest
włączyła standardowy tryb zgodności udostępniany przez /permissive-
, chyba że jawnie zastąpione /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 na podstawie as-is.
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
Umożliwia zgodność ze standardem ISO C11. Jest ona dostępna od wersji 16.8 programu Visual Studio 2019.
/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:
_Pragma
restrict
-
_Noreturn
i <stdnoreturn.h> -
_Alignas
i_Alignof
<stdalign.h> -
_Generic
i <tgmath.h> _Static_assert
Ś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
.alignas
alignof
noreturn
static_assert
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 aktualnie zaimplementowane funkcje kompilatora i standardowej biblioteki proponowane w następnej wersji roboczej 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