/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 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[言語] プロパティ ページを選択します。

  3. [for ループ スコープの強制準拠] プロパティを変更します。

このコンパイラ オプションをコードから設定するには

関連項目

/Zc (準拠)
/Za、/Ze (言語拡張機能の無効化)