此代码编译正常且没有错误。
#include <stdio.h>
#define N 10000
int main(void){
int t;
for(int i = 0, t = 1; i < 100; ++i){
printf("%i\n", i);
}
}
但是,如果您颠倒i
和t
的顺序,则无法编译。
#include <stdio.h>
#define N 10000
int main(void){
int t;
for(t= 1, int i = 0; i < 100; ++i){
printf("%i\n", i);
}
}
error: expected expression before int
答案 0 :(得分:6)
第一个代码段声明了两个新变量i
和t
,供循环使用。
第二个代码段不正确,因为它将赋值与声明混合在一起。 for
循环的C语法允许声明或赋值,但不允许两者。
请注意,在第一个代码段中循环之前声明的变量t
与循环中使用的变量t
分开:
int t = 100;
for(int i = 0, t = 1; i < 10 ; ++i, ++t){
printf("%i %d\n", i, t);
}
printf("%d\n", t);
最后打印的t
值仍为100
,即使循环内的t
以最终值11(demo)结束。
答案 1 :(得分:1)
它不是变量的顺序,而是类型说明符int
的位置。
如果您指定了一个类型,然后使用一个或多个逗号,则该逗号后面的每个变量都使用该类型:
int i, k, j; // i and j and k are all int's
你不能在逗号之后指定其他类型,如果你愿意,你必须用分号分隔这些语句,你显然不能在for循环表达式中做,因为含义不同。