我(可能是从老师那里)听说,应该在程序/函数之上声明所有变量,并且在声明中声明新变量可能会引起问题。
但是后来我在阅读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,所有这些都是洁净的。