我正在使用Microchip的XC32编译器,它不允许在循环内声明变量(不支持C99),所以我不能这样做:
for(int i = 0;i<10;i++)
{do w/e}
我不愿意把它变成一个全局的,因为很难跟踪它在大项目中的价值,在各种循环中使用相同的东西,即使你在每个循环中将它初始化为i = 0
。我甚至对此有一个错误,如果你有一些使用相同的i
的嵌套循环,结果会发生奇怪的事情。
据我所知,我不能手动“取消声明”它,但是在通过块后,在一段代码中定义的变量是未声明的?这是真的,这是否意味着此代码将像上面的代码一样:
{
int i;
for(i = 0;i<10;i++)
{do w/e}
}//no i anymore?
答案 0 :(得分:7)
根据C99标准,for
循环的子句语句中声明的变量范围在范围内受限于该循环。
在C89 / C90中,子句只是一个可选的表达式。
因此,在C89 / C90中,您可以自信地使用
模拟C99行为{ /*open scope block*/
/* your declaration here, including possible definition*/
for (expression; ...){
}
} /*close scope block*/
答案 1 :(得分:3)
通过将其放入一个区块,您将在相关区块的结尾处完全摆脱它。
然而,这意味着什么,取决于编译器,体系结构和环境。
答案 2 :(得分:2)
变量范围位于定义它的块内。因此,一旦块完成,您就无法访问该变量。
您可能会发现这有用: - Local variables display as “Out of Scope” when they are most clearly NOT out of scope.