Udostępnij za pośrednictwem


/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 __cplusplus199711L, 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:

/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:c17program MSVC obsługuje wszystkie funkcje C11 i C17 wymagane przez standardy. Opcje kompilatora /std:c11 i /std:c17 umożliwiają obsługę tych funkcji:

Ś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_Noreturni _Static_assert.alignasalignofnoreturnstatic_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

  1. 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).
  2. Wybierz stronę właściwości Właściwości>konfiguracji C/C++>Language.
  3. 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