/Za、/Ze (言語拡張機能の無効化)
/Za コンパイラ オプションを指定すると、Microsoft 拡張機能のエラーが無効になり、ANSI C89 や ISO C90 と互換性のない C にエラーが出力されます。 非推奨の /Ze コンパイラ オプションを指定すると、Microsoft 拡張機能が有効になります。 Microsoft 拡張機能は既定で有効になっています。
構文
/Za
/Ze
解説
Note
コードが C++ としてコンパイルされているときは、/Za の使用は推奨されません。 /Ze オプションが非推奨となっているのは、その動作が既定でオンになっているためです。 非推奨のコンパイラ オプションの一覧については、「非推奨および削除されたコンパイラ オプション」を参照してください。
Microsoft C/C++ コンパイラは、次の 2 つの方法での C コードのコンパイルに対応しています。
ソース ファイルの拡張子が .c であるとき、または /Tc オプションか /TC オプションが有効になっているときに、コンパイラで C コンパイル モードが既定で使用されます。 C コンパイラは、既定で C 言語に対して Microsoft 拡張機能を有効にする、C89/C90 コンパイラです。 特定の拡張機能の詳細については、「C および C++ の Microsoft 拡張機能」を参照してください。 C コンパイルと /Za オプションの両方が指定されている場合、C コンパイラは C89/C90 標準に厳密に準拠します。 コンパイラでは、Microsoft 拡張キーワードを単純な識別子として扱い、他の Microsoft 拡張機能を無効にし、C プログラムの __STDC__ 定義済みマクロを自動的に定義します。
コンパイラでは、C++ コンパイル モードで C コードをコンパイルできます。 これは、拡張子が .c でないソース ファイルで、かつ /Tp オプションまたは /TP オプションが指定されているときの既定の動作です。 C++ コンパイル モードでは、C++ 標準に組み込まれている ISO C99 標準と C11 標準のそれらの部分にコンパイラが対応しています。 ほぼすべての C コードは、有効な C++ コードでもあります。 有効な C++ コードでないか、C++ で解釈が異なる C キーワードとコード コンストラクトは少数です。 そのようなケースでは、コンパイラは C++ 標準に従って動作します。 C++ コンパイル モードでは、/Za オプションを指定すると予期しない動作が発生するため、推奨されません。
その他のコンパイラ オプションは、コンパイラの標準への準拠を保証する方法に影響を及ぼす可能性があります。 C および C++ の特定の標準動作の設定を指定する方法については、/Zc コンパイラ オプションを参照してください。 C++ 標準準拠の追加設定については、/permissive- と /std コンパイラ オプションを参照してください。
Visual C++ の準拠に関する問題の詳細については、「非標準動作」を参照してください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[言語] プロパティ ページを選択します。
[言語拡張を無効にする] プロパティを変更します。
このコンパイラ オプションをコードから設定するには
以下を参照してください。DisableLanguageExtensions
関連項目
コンパイラ オプション
/Zc (準拠)
/permissive- (標準への準拠)
/std (言語の標準バージョンの指定)