关于C语言变量声明在其他语句后的一些细节

今天一个同学来找我,说他的代码老是编译不通过,我看了半天,好像都很符合逻辑,但一直显示一个变量未定义,我就纳闷了,代码类似如下:

1 int main(){
2     login();
3     int id;
4     scanf("%d", &id);
5     ....
6 }

他用的是VC6,编译器一直提示变量"id"未定义,做了一些猜测性调试,仍是错误,我就凭着感觉把login;和int id;互换了个行,发现成功编译,然后他就走了,留下我一个人回想着原来错误的代码在电脑前凌乱,于是就有了下面的发现。

 

给出如下C代码:

1 int main(){
2     int a;
3     printf("%d\n", a);
4     int b;
5     printf("%d,%d\n", a ,b);
6 
7     return 1;
8 }

在VC6模式下,第 5 行会报错:error C2065: 'b' : undeclared identifier。

结论:这是一个早期的C语言规定(C++没有这样的规定,所以你可以把上述代码改用.cpp保存,VC6就可以编译通过),在VC6(即C90)下,每个块级作用域中的所有代码必须在最前面就被声明,一旦执行任何其他非声明语句之后,后续的任何声明都将无效。C99之后,此标准被改变,允许在任何需要一个变量的时候先声明再使用(但是,这时一个不好的编程习惯)。

转载于:https://www.cnblogs.com/ryzz/p/9283751.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值