/std (言語の標準バージョンの指定)/std (Specify Language Standard Version)

指定されたバージョンの C または C++ 言語標準でサポートされている C および C++ 言語機能を有効にします。Enable supported C and C++ language features from the specified version of the C or C++ language standard.

構文Syntax

/std:c++14
/std:c++17
/std:c++latest
/std:c11
/std:c17

解説Remarks

この /std オプションは、Visual Studio 2017 以降で使用できます。The /std option is available in Visual Studio 2017 and later. これは、コードのコンパイル中に有効になっているバージョン固有の ISO C または C++ プログラミング言語の標準機能を制御するために使用されます。It's used to control the version-specific ISO C or C++ programming language standard features enabled during compilation of your code. このオプションを使用すると、言語標準の特定のバージョンに準拠している既存のコードを破壊する可能性のある、新しい言語およびライブラリ機能のサポートを無効にできます。This option allows you to disable support for certain new language and library features: ones that may break your existing code that conforms to a particular version of the language standard.

C++ 標準サポートC++ standards support

既定で /std:c++14 は、が指定されています。これにより、C++ 言語標準の以降のバージョンの言語および標準ライブラリ機能が無効になります。By default, /std:c++14 is specified, which disables language and standard library features found in later versions of the C++ language standard. を使用し /std:c++17 て、c++ 17 の標準固有の機能と動作を有効にします。Use /std:c++17 to enable C++17 standard-specific features and behavior. 現在実装されているコンパイラと、次のドラフト標準に提案されている標準ライブラリ機能を明示的に有効にするには、を使用し /std:c++latest ます。To explicitly enable the currently implemented compiler and standard library features proposed for the next draft standard, use /std:c++latest . C++ 20 のすべての機能にはが必要 /std:c++latest です。実装が完了すると、新しいオプションが有効になり /std:c++20 ます。All C++20 features require /std:c++latest ; when the implementation is complete, a new /std:c++20 option will be enabled.

既定のオプションでは、 /std:c++14 MSVC コンパイラによって実装された c++ 14 の機能のセットが有効になります。The default /std:c++14 option enables the set of C++14 features implemented by the MSVC compiler. このオプションを使用すると、言語標準のより新しいバージョンで変更された機能または新しい機能に対するコンパイラと標準ライブラリのサポートが無効になります。This option disables compiler and standard library support for features that are changed or new in more recent versions of the language standard. 以前のリリースの MSVC コンパイラで既に実装されている C++ 17 の一部の機能を無効にすることはできません。It doesn't disable some C++17 features already implemented in previous releases of the MSVC compiler. Visual Studio 2015 Update 2 で使用可能な機能に対して既に依存関係を取得しているユーザーの重大な変更を回避するために、これらの機能 /std:c++14 はオプションが指定されている場合は有効のままになります。To avoid breaking changes for users who have already taken dependencies on the features available in or before Visual Studio 2015 Update 2, these features remain enabled when the /std:c++14 option is specified:

を指定したときに有効になる C++ 14 と C++ 17 の機能の一覧 /std:c++14 があります。A list of which C++14 and C++17 features are enabled when you specify /std:c++14 is available. 詳細については、「 Microsoft C++ 言語準拠テーブル」のメモを参照してください。For more information, see the notes in Microsoft C++ language conformance table.

オプションを使用すると、 /std:c++17 MSVC コンパイラによって実装された c++ 17 のすべての機能が有効になります。The /std:c++17 option enables the full set of C++17 features implemented by the MSVC compiler. このオプションを選択すると、C++ 17 以降で追加または変更された機能に対するコンパイラと標準ライブラリのサポートが無効になります。This option disables compiler and standard library support for features that are new or changed after C++17. これには、C++ 標準の作業ドラフトおよび欠陥更新のバージョンでの C + + 17 の変更が含まれます。That includes post-C++17 changes in versions of the Working Draft and defect updates of the C++ Standard.

オプションを使用すると、 /std:c++latest コンパイラおよびライブラリで現在実装されている C + + 17 言語およびライブラリの機能が有効になります。The /std:c++latest option enables the post-C++17 language and library features currently implemented in the compiler and libraries. これらの機能には、C++ 20 の作業ドラフトからの変更、C++ 17 に含まれていない欠陥のある更新、およびドラフト標準の試験的な提案が含まれる場合があります。These features may include changes from the C++20 Working Draft, defect updates that aren't included in C++17, and experimental proposals for the draft standard. サポート対象の言語およびライブラリ機能については、Visual C++ の新機能に関するページを参照してください。For a list of supported language and library features, see What's New for Visual C++. オプションは、 /std:c++latest スイッチによって保護されている機能を有効にしません /experimental が、有効にする必要がある場合があります。The /std:c++latest option doesn't enable features guarded by the /experimental switch, but may be required to enable them.

重要

によって有効になるコンパイラおよびライブラリの機能は、 /std:c++latest 将来の c++ 標準で表示される可能性がある機能と、承認された c++ 20 の機能を表します。The compiler and library features enabled by /std:c++latest represent features that may appear in a future C++ standard, as well as C++20 features that are approved. 承認されていない機能では、破壊的変更や通知なしでの削除が起こる可能性があり、これは無保証で提供されています。Features that have not been approved are subject to breaking changes or removal without notice and are provided on an as-is basis.

/std C++ のコンパイル中に有効なオプションは、 _ MSVC _ LANGプリプロセッサマクロを使用して検出できます。The /std option in effect during a C++ compilation can be detected by use of the _MSVC_LANG preprocessor macro. 詳細については、プリプロセッサ マクロに関するページを参照してください。For more information, see Preprocessor Macros.

/std:c++14 およびオプションは、 /std:c++latest Visual Studio 2015 Update 3 以降で使用できます。The /std:c++14 and /std:c++latest options are available beginning in Visual Studio 2015 Update 3. この /std:c++17 オプションは、Visual Studio 2017 バージョン15.3 以降で使用できます。The /std:c++17 option is available beginning in Visual Studio 2017 version 15.3. 前述のように、一部の C++ 17 標準動作はオプションによって有効になってい /std:c++14 ますが、その他の c++ 17 機能はすべてによって有効になってい /std:c++17 ます。As noted above, some C++17 standard behavior is enabled by the /std:c++14 option, but all other C++17 features are enabled by /std:c++17 . C++ 20 の機能は /std:c++latest 、実装が完了するまでによって有効になります。C++20 features are enabled by /std:c++latest until the implementation is complete.

注意

MSVC コンパイラのバージョンまたは更新レベルによっては、C++ 17 の機能が完全に実装されていないか、オプションを指定したときに完全に準拠していない可能性があり /std:c++17 ます。Depending on the MSVC compiler version or update level, C++17 features may not be fully implemented or fully conforming when you specify the /std:c++17 options. リリースバージョン別の Visual C++ における C++ 言語準拠の概要については、「 Microsoft c++ 言語準拠テーブル」を参照してください。For an overview of C++ language conformance in Visual C++ by release version, see Microsoft C++ language conformance table.

C 標準サポートC standards support

既定では、コードが C としてコンパイルされると、MSVC コンパイラは特定の C 標準に準拠していません。By default, when code is compiled as C, the MSVC compiler doesn't conform to a particular C standard. 複数の Microsoft 拡張機能を備えた ANSI C89 を実装します。一部は ISO C99 に含まれています。It implements ANSI C89 with several Microsoft extensions, some of which are part of ISO C99. 一部の Microsoft 拡張機能は、コンパイラオプションを使用して無効にすることができ /Za ますが、その他の拡張機能は有効なままです。Some Microsoft extensions can be disabled by using the /Za compiler option, but others remain in effect. 厳密な C89 準拠を指定することはできません。It isn't possible to specify strict C89 conformance.

Visual Studio 2019 バージョン16.8 以降で /std:c11 は、 /std:c17 C としてコンパイルされたコードに対してまたはを指定できます。これらのオプションでは、ISO C11 と ISO C17 に対応する準拠モードが指定されます。Starting in Visual Studio 2019 version 16.8, you may specify /std:c11 or /std:c17 for code compiled as C. These options specify conformance modes that correspond with ISO C11 and ISO C17. これらの標準をサポートするために新しいプリプロセッサが必要であるため、 /std:c11 /std:c17 オプションとコンパイラオプションによってオプションが自動的に設定され /Zc:preprocessor ます。Because the new preprocessor is needed to support these standards, the /std:c11 and /std:c17 compiler options set the /Zc:preprocessor option automatically. C11 または C17 に従来の (レガシ) プリプロセッサを使用する場合は、コンパイラオプションを明示的に設定する必要があり /Zc:preprocessor- ます。If you want to use the traditional (legacy) preprocessor for C11 or C17, you must set the /Zc:preprocessor- compiler option explicitly. オプションを設定 /Zc:preprocessor- すると、予期しない動作が発生する可能性があり、推奨されません。Setting the /Zc:preprocessor- option may lead to unexpected behavior, and isn't recommended.

注意

リリース時点では、最新の Windows SDK と UCRT ライブラリでは、C11 と C17 のコードがまだサポートされていません。At the time of release, the latest Windows SDK and UCRT libraries do not yet support C11 and C17 code. Windows SDK と UCRT のプレリリースバージョンが必要です。A pre-release version of the Windows SDK and UCRT is required. 詳細とインストール手順については、「 Install C11 And C17 support In Visual Studio」を参照してください。For more information and installation instructions, see Install C11 and C17 support in Visual Studio.

またはを指定すると /std:c11 /std:c17 、MSVC は C11 と C17 のすべての必要な機能をサポートします。When you specify /std:c11 or /std:c17 , MSVC supports all the required features of C11 and C17. コンパイラオプションは、次の機能のサポートを有効にします。The compiler options enable support for these functionalities:

  • _Pragma

  • restrict

  • _Noreturn そして <stdnoreturn.h>_Noreturn and <stdnoreturn.h>

  • _Alignas 、、 _Alignof および <stdalign.h>_Alignas , _Alignof and <stdalign.h>

  • _Generic そして <tgmath.h>_Generic and <tgmath.h>

  • _Static_assert

IDE では、ソースファイルにファイル拡張子がある場合 .c 、またはコンパイラオプションを指定した場合に、IntelliSense とコードの強調表示に C の設定が使用され /TC ます。The IDE uses C settings for IntelliSense and code highlighting when your source files have a .c file extension, or when you specify the /TC compiler option. 現在、IntelliSense による強調表示は、標準ヘッダーで導入されたマクロではなく、キーワードでのみ使用できます。Currently, IntelliSense highlighting is only available for keywords, and not the macros introduced by the standard headers.

C17 は ISO C11 のバグ修正リリースであるため、MSVC support for C11 には、関連するすべての欠陥レポートが既に含まれています。Since C17 is largely a bug fix release of ISO C11, MSVC support for C11 already includes all the relevant defect reports. 現時点では、マクロを除き、C11 と C17 の両方のバージョンに違いはありません __STDC_VERSION__At present, there are no differences between the C11 and C17 versions except for the __STDC_VERSION__ macro. C11 の場合は、C17 の場合はに展開さ 201112L 201710L れます。It expands to 201112L for C11, and 201710L for C17.

コンパイラは、ISO C11 のオプション機能をサポートしていません。The compiler doesn't support any optional features of ISO C11. C11 のこれらのオプション機能のいくつかは、MSVC がアーキテクチャ上の理由で実装されていない C99 の必須機能でした。Several of these optional features of C11 were required features of C99 that MSVC hasn't implemented for architectural reasons. などの機能テストマクロを使用して、 __STDC_NO_VLA__ 個々の機能のコンパイラサポートレベルを検出できます。You can use the feature test macros such as __STDC_NO_VLA__ to detect compiler support levels for individual features. C 固有の定義済みマクロの詳細については、「 定義済みマクロ」を参照してください。For more information about C-specific predefined macros, see Predefined macros.

  • Visual Studio 2019 バージョン16.8 リリースでは、準拠しているマルチスレッド、アトミック、または複素数のサポートはありません。There's no conforming multithreading, atomic, or complex number support in the Visual Studio 2019 version 16.8 release.

  • aligned_alloc Windows ヒープの実装により、サポートが不足しています。aligned_alloc support is missing, because of the Windows heap implementation. もう1つの方法は、を使用することです _aligned_mallocThe alternative is to use _aligned_malloc.

  • この変更によって ABI が破損するため、現在、DR 400 のサポートはでは実装されてい realloc ません。DR 400 support is currently unimplemented for realloc, because this change would break the ABI.

  • 可変長配列 (VLA) のサポートは計画されていません。Variable length array (VLA) support isn't planned. 可変長配列は、比較可能な固定サイズの配列よりも効率が悪くなることがよくあります。Variable length arrays are often less efficient than comparable fixed sized arrays. また、これらは、安全かつ安全に実装されている場合に、同等のヒープメモリ割り当てと比較して非効率的です。They're also inefficient compared to equivalent heap memory allocations, when safely and securely implemented. VLAs gets() は、非推奨とされ、削除が予定されているに相当する攻撃ベクトルを提供します。VLAs provide attack vectors comparable to gets(), which is deprecated and planned for removal.

Visual Studio 開発環境でこのコンパイラ オプションを設定するにはTo set this compiler option in the Visual Studio development environment

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。Open the project's Property Pages dialog box. 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関するページを参照してください。For details, see Set C++ compiler and build properties in Visual Studio.

  2. [構成プロパティ][C/C++][言語] の順に選択します。Select Configuration Properties , C/C++ , Language .

  3. C++ 言語標準 (または c 言語標準 の場合) で、ドロップダウンコントロールからサポートする言語標準を選択し、[ OK] または [ 適用 ] を選択して変更を保存します。In C++ Language Standard (or for C, C Language Standard ), choose the language standard to support from the dropdown control, then choose OK or Apply to save your changes.

関連項目See also

MSVC コンパイラ オプションMSVC Compiler Options
MSVC Compiler Command-Line 構文MSVC Compiler Command-Line Syntax