我听说(可能是从老师那里)应该在程序/函数的开头声明所有变量,而在语句中声明新变量可能会导致问题。
但是当我读 K&R 时,我遇到了这句话:"变量的声明(包括初始化)可以跟随引入任何复合语句的左花括号,不仅仅是开始函数的花括号。"他还举了一个例子:
if (n > 0){
int i;
for (i=0;i<n;i++)
...
}
我尝试了这个概念,并且它甚至适用于数组。例如:
int main(){
int x = 0 ;
while (x<10){
if (x>5){
int y[x];
y[0] = 10;
printf("%d %d\n",y[0],y[4]);
}
x++;
}
}
那么我什么时候不能声明变量?例如,如果我的变量声明不是紧接着左花括号后面的呢?就像这样:
int main(){
int x = 10;
x++;
printf("%d\n",x);
int z = 6;
printf("%d\n",z);
}
这会根据程序/计算机而有可能引起问题吗?
gcc
的限制比较宽松。您正在使用 c99 变长数组和声明。使用gcc -std=c89 -pedantic
编译,将会获得警告。但根据 c99 规范,这都是合法的。 - Dave