C中的临时变量

时间:2014-03-07 12:17:52

标签: c embedded microchip

我正在使用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?

3 个答案:

答案 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.