正如您所知,在C语言中,您不能在for循环的初始化中声明循环变量,而不是C ++。在纯C中声明循环变量的熟练/好的方式是什么?全球化是否更好?
int i = 0;
for (i = 0; fmla[i] != '\0'; i ++) {
//do something
}
答案 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
}
[...] 如果 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表达式。