/Zc:forScope (for ループのスコープの強制準拠)
Microsoft 拡張機能 (/Ze) を使用して、for ループに C++ の標準動作を実装する場合に使用します。/Zc:forScope は既定でオンになります。
/Zc:forScope[-]
解説
標準動作では、for ループの後、for ループの初期化子をスコープの外にします。/Za、/Ze (言語拡張機能の無効化) では、ローカル スコープが終了するまで、for ループの初期化子がスコープ内に残っています。
次のコードは /Za ではなく /Ze でコンパイルされます。
// zc_forScope.cpp
// compile with: /Zc:forScope- /Za
// C2065 expected
int main() {
// Uncomment the following line to resolve.
// int i;
for (int i =0; i < 1; i++)
;
i = 20; // i has already gone out of scope under /Za
}
/Zc:forScope- を使用した場合は、前のスコープでの宣言によって変数がスコープ内に存在すると、警告メッセージが表示されます。この警告メッセージは、既定では無効になっています。これを試してみるには、上のコードの // 文字を削除して int i を宣言してください。
conform プラグマを使用して、/Zc:forScope の実行時の動作を変更できます。
既存の .pch ファイルを使ったプロジェクトで /Zc:forScope- を使用すると、警告メッセージが表示されて /Zc:forScope- は無視され、既存の .pch ファイルを使ってコンパイルが継続されます。新しい .pch ファイルを生成するには、/Yc (プリコンパイル済みヘッダー ファイルの作成) を使用します。
Visual C++ の準拠の問題の詳細については、「Visual C++ の互換性と準拠の問題」を参照してください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「プロジェクト設定の変更」を参照してください。
[C/C++] フォルダーをクリックします。
[言語] プロパティ ページをクリックします。
[for ループ スコープの強制準拠] プロパティを変更します。
このコンパイラ オプションをコードから設定するには
- ForceConformanceInForLoopScope を参照してください。