C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?

参考网址:http://www.cnblogs.com/web-HCJ/p/4468689.html


报错信息:error C2065: 'salary' : undeclared identifier

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
void  main(){
printf ( "我的成绩是100分!" ); //不使用变量
int  salary; //使用变量
salary = 100;
printf ( "我的成绩是%d分!" ,salary);
return  0;
}

问题根源:编译器问题——C89和C99

C89规定,在任何执行语句之前,在块的开头声明所有局部变量。

在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。

 

变量声明放在前面就不报错了······

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
void  main(){
int  salary; //使用变量
salary = 100;
printf ( "我的成绩是100分!" ); //不使用变量
printf ( "我的成绩是%d分!" ,salary);
return  0;
}

 

不同风格利弊

变量在函数开头定义:便于修改

变量就近定义:便于阅读

变量在块语句的开头定义:有的临时变量放在语句块开头,可以不用在函数开头定义,并且在使用完毕后释放空间,可以这么做,但不要无故添加花括号来提高代码的结构。

 

要达到最大的兼容跨平台性,还是放在函数开头定义吧

使用哪种方式,看实际情况+个人喜好!

 

我个人是比较喜欢就近定义的,觉得比较方便一点。

可是,现在使用的VC6.0,编译器可能是C89的,所以不得不用开头定义。

 

顺便提一提:该文件的后缀名为.c

在网上查了一下,有许多说法,列举一二(意思大同小异)

1.源文件保存为.c格式的话变量只能定义在最前,若保存为.cpp格式的话,变量定义较为灵活,不用在最前。

2.在C语言里,变量只能在函数的开头处声明和定义。在函数里要用到的变量必须要在开头处声明定义。声明定义的前面不能有任何其他非声明定义的语句。全局变量在函数体的外部声明定义。而C++里(.CPP文件是按C++标准编译的),只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求。而C语言的就定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。

 

然而,把后缀名改为.cpp后,还是报错

 

void main()改为int main(void)就可以了

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int  main( void  ){
int  salary; //使用变量
salary = 100;
printf ( "我的成绩是100分!" ); //不使用变量
printf ( "我的成绩是%d分!" ,salary);
return  0;
}

应该是语言的数据类型的问题吧???是不是呢?大神何处在~

(完,可待续)

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值