/Zc:forScope(强制 for 循环范围中的一致性)
用于针对具有 Microsoft 扩展 ( /Ze ) 的for循环实现标准 C++ 行为。
语法
/Zc:forScope[-]
注解
标准行为是使 for
循环的初始值设定项在 for
循环之后超出范围。 在 /Zc:forScope- 和 /Ze下,for
循环的初始值设定项保持在范围内,直到局部范围结束。
在默认情况下,/Zc:forScope 选项处于打开状态。 在指定 /permissive- 选项时,/Zc:forScope 不受影响。
/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
字符。
可通过使用 conform 杂注修改 /Zc:forScope 的运行时行为。
如果在包含现有 .pch 文件的项目中使用 /Zc:forScope- ,则将生成警告、忽略 /Zc:forScope- ,并使用现有 .pch 文件继续进行编译。 如果需要生成新的 .pch 文件,请使用 /Yc (创建预编译头文件) 。
有关 Visual C++ 中一致性问题的详细信息,请参阅 Nonstandard Behavior。
在 Visual Studio 开发环境中设置此编译器选项
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“C/C++”>“语言”属性页。
修改 “强制 For 循环范围中的一致性” 属性。