for的变量声明顺序

时间:2017-04-28 12:02:28

标签: c language-lawyer

此代码编译正常且没有错误。

#include <stdio.h>
#define N 10000

int main(void){
    int t;
    for(int i = 0, t = 1; i < 100; ++i){
        printf("%i\n", i);
    }
}

但是,如果您颠倒it的顺序,则无法编译。

#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

这是故意的吗?它为什么会这样?我使用GCC和C11。

2 个答案:

答案 0 :(得分:6)

第一个代码段声明了两个新变量it,供循环使用。

第二个代码段不正确,因为它将赋值与声明混合在一起。 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循环表达式中做,因为含义不同。