在纯C(前C99)中声明循环变量的好方法?

时间:2014-12-31 10:24:57

标签: c loops for-loop c89

正如您所知,在C语言中,您不能在for循环的初始化中声明循环变量,而不是C ++。在纯C中声明循环变量的熟练/好的方式是什么?全球化是否更好?

  int i = 0;
  for (i = 0; fmla[i] != '\0'; i ++) {
    //do something
  }

4 个答案:

答案 0 :(得分:5)

在C99之前,要么将控制变量作为其他变量声明在函数的头部,要么使用内部块:

//some code
{
  int i;
  for (i=0; ...; ...) {
  }
}
// some code

这避免与其他控制变量冲突,并为您提供类似于C99 for for循环的语义。

答案 1 :(得分:4)

您可以在for循环的初始化中声明循环变量。 C99引入了这个功能。

for (int i = 0; fmla[i] != '\0'; i ++) {
   //do something
}  

C11:6.8.5.3 for语句:

  

[...] 如果 clause-1 是一个声明,它声明的任何标识符的范围是声明的剩余部分和整个循环,包括其他两个表达; [...]。


  

在纯C中声明循环变量的熟练/好的方式是什么?全球化是否更好?

如果你想在for循环之外使用i的值,那么最好不要在循环初始化中声明i,否则你需要一个额外的变量来跟踪{{{ 1}}。

答案 2 :(得分:4)

那不再是真的了。从C99开始,您可以使用:

for (int i = 0; fmla[i] != '\0'; i ++) {
    //do something
}

答案 3 :(得分:2)

C99标准说:

6.8.5.3 for陈述

  

声明

     

for(clause-1; expression-2; expression-3)语句   表现如下:

     

表达式表达式-2是在每次执行循环体之前计算的控制表达式。在每次执行循环体之后,表达式-3被评估为void表达式。如果clause-1是一个声明,它声明的任何变量的范围是声明的剩余部分和整个循环,包括其他两个表达式;它是在控制表达式的第一次评估之前按执行顺序到达的。如果子句-1是一个表达式,则在第一次评估控制表达式之前将其计算为void表达式。