/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 __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
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:

/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, z wyjątkiem std::formatrozszerzeń formatowania języka C++20 <chrono> oraz fabryk zakresów i adapterów zakresu z programu <ranges>. Te funkcje są nadal dostępne tylko w obszarze /std:c++latest.

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++.

/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.

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: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, , alignofnoreturni 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

  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