C中的临时变量

cab*_*00t 2 c embedded microchip

我正在使用Microchip的XC32编译器,它不允许在循环内声明变量(不支持C99),所以我不能这样做:

for(int i = 0;i<10;i++)
    {do w/e}
Run Code Online (Sandbox Code Playgroud)

我不想让它成为一个全局的,因为很难跟踪它在大项目中的价值,在各种循环中使用相同的东西,即使你i = 0在每个循环中初始化它.我甚至对此有一个错误,如果你有一些使用相同的嵌套循环,结果会发生奇怪的事情i.

据我所知,我不能手动"取消声明"它,但是在通过块后,在一段代码中定义的变量是未声明的?这是真的,这是否意味着这个代码将像上面的代码一样:

{
     int i;
     for(i = 0;i<10;i++)
        {do w/e}
}//no i anymore?
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 7

根据C99标准,在循环的子句语句中声明的变量的范围for在范围内受限于该循环.

在C89/C90中,该子句仅仅是一个可选表达式.

因此,在C89/C90中,您可以放心地模拟C99行为

{ /*open scope block*/
   /* your declaration here, including possible definition*/
   for (expression; ...){
   }
} /*close scope block*/
Run Code Online (Sandbox Code Playgroud)