/Zc:forScope (for ループのスコープの強制準拠)
Microsoft の拡張機能 ( /Ze ) のforループの標準 C++ 動作を実装するために使用します。
構文
/Zc:forScope[-]
解説
標準動作とは、for
ループの初期化子が for
ループの後にスコープ外に出るようにすることです。 /Zc:forScope- と /Zeでは、for
ループの初期化子は、ローカル スコープが終わるまでスコープ内にとどまります。
/Zc:forScope オプションは既定でオンになります。 /Zc:forScope は、/permissive- オプションが指定されている場合には影響を受けません。
/Zc:forScope- オプションは非推奨とされます。今後のバージョンからは削除されます。 /Zc:forScope- を使うと、廃止予定の警告 D9035 が表示されます。
次のコードは /Ze ではコンパイルされますが、 /Zaではコンパイルされません。
// zc_forScope.cpp
// compile by using: cl /Zc:forScope- /Za zc_forScope.cpp
// C2065, D9035 expected
int main() {
// Compile by using cl /Zc:forScope- zc_forScope.cpp
// to compile this non-standard code as-is.
// Uncomment the following line to resolve C2065 for /Za.
// int i;
for (int i = 0; i < 1; i++)
;
i = 20; // i has already gone out of scope under /Za
}
/Zc:forScope-を使う場合、以前のスコープで行った宣言によって変数がスコープ内にあるときに、警告 C4288 (既定ではオフ) が表示されます。 これを示すために、サンプル コードから //
の文字を削除して int i
を宣言します。
/Zc:forScope の実行時の動作は、 conform プラグマを使って変更できます。
既存の .pch ファイルがあるプロジェクトで /Zc:forScope- を使う場合、警告が表示され、 /Zc:forScope- は無視され、既存の .pch ファイルを使ってコンパイルが継続されます。 新しい .pch ファイルを生成する場合、/Yc (プリコンパイル済みヘッダー ファイルの作成) を使います。
Visual C++ の準拠に関する問題について詳しくは、「 Nonstandard Behavior」をご覧ください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[言語] プロパティ ページを選択します。
[for ループ スコープの強制準拠] プロパティを変更します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。ForceConformanceInForLoopScope