未声明的变量在C ++中是否合法?

时间:2014-11-15 20:23:12

标签: c++ visual-c++ undeclared-identifier

我对some code我正在努力编译感到困惑。编译器给了我几十个“未声明的标识符”错误。它们似乎都是这样的局部循环变量:

for ( i = 0; i < 100; i++ )

我可以轻松修复它,但我不明白该代码如何为其他人编译。而这些文件在很长一段时间内都没有被触及过。

VC ++是否有某种编译器标志会自动假定int未声明的变量?我找不到它。是什么给了什么?


复制问题的最小完整代码示例:

for ( int i = 0; i < 100; i++ );
for ( i = 0; i < 100; i++ );

2 个答案:

答案 0 :(得分:5)

该问题与for语句中声明的变量范围有关。该标准将此范围定义为仅限于for循环本身。但是一些编译器支持用于将此范围扩展到封闭集团的非标准遗留扩展。

要使用MSVC编译此类代码,请添加编译器开关/ Ze

有关详细信息,请参阅MSDN docs

下面的评论表明/ Zc:forScope,但根据this MSDN page表示不对。

顺便说一句,G ++有一个类似的-fno-for-scope开关。

答案 1 :(得分:0)

C ++是一种打字的语言。其中一个问题是你必须在使用它们之前声明变量。

这对许多人来说似乎很奇怪,但它有助于拥有良好的编码实践,就像在变量名称中输入错误时给出错误一样。

关于易于理解的概念,它可以帮助您通过检查参数的类型来调用重载函数的良好版本。此检查可以在编译时完成,从而提高运行时的性能。

这是从C继承的,它比C ++更加集合。分配变量意味着在堆栈上分配内存空间。

您可以随时尝试查看c ++ 11和c ++ 14中的auto关键字,但在此之前请确保您知道类型是什么(就像是{{之间的区别} 1}},11.0