C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?
2015-04-30 13:39
453 查看
报错信息:error C2065: 'salary' : undeclared identifier
问题根源:编译器问题——C89和C99
C89规定,在任何执行语句之前,在块的开头声明所有局部变量。
在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。
变量声明放在前面就不报错了······
不同风格利弊
变量在函数开头定义:便于修改
变量就近定义:便于阅读
变量在块语句的开头定义:有的临时变量放在语句块开头,可以不用在函数开头定义,并且在使用完毕后释放空间,可以这么做,但不要无故添加花括号来提高代码的结构。
要达到最大的兼容跨平台性,还是放在函数开头定义吧
使用哪种方式,看实际情况+个人喜好!
我个人是比较喜欢就近定义的,觉得比较方便一点。
可是,现在使用的VC6.0,编译器可能是C89的,所以不得不用开头定义。
顺便提一提:该文件的后缀名为.c
在网上查了一下,有许多说法,列举一二(意思大同小异)
1.源文件保存为.c格式的话变量只能定义在最前,若保存为.cpp格式的话,变量定义较为灵活,不用在最前。
2.在C语言里,变量只能在函数的开头处声明和定义。在函数里要用到的变量必须要在开头处声明定义。声明定义的前面不能有任何其他非声明定义的语句。全局变量在函数体的外部声明定义。而C++里(.CPP文件是按C++标准编译的),只要在用到变量前对该变量进行声明定义就行了,位置不做特别要求。而C语言的就定了在一个模块里(函数、循环体等)先声明一切所需变量后才能进行相关操作的规定。
然而,把后缀名改为.cpp后,还是报错
void main()改为int main(void)就可以了
应该是语言的数据类型的问题吧???是不是呢?大神何处在~
(完,可待续)
#include <stdio.h> void main(){ printf("我的成绩是100分!");//不使用变量 int salary;//使用变量 salary = 100; printf("我的成绩是%d分!",salary); return 0; }
问题根源:编译器问题——C89和C99
C89规定,在任何执行语句之前,在块的开头声明所有局部变量。
在C99以及C++中则没有这个限制,即在首次使用之前,可在块的任何位置都可以声明变量。
变量声明放在前面就不报错了······
#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)就可以了
#include <stdio.h> int main(void ){ int salary;//使用变量 salary = 100; printf("我的成绩是100分!");//不使用变量 printf("我的成绩是%d分!",salary); return 0; }
应该是语言的数据类型的问题吧???是不是呢?大神何处在~
(完,可待续)
相关文章推荐
- C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?
- KEIL编译器【C语言编译选项优化等级说明】【支持C99(变量声明在执行语句之后)】【反汇编设置】【C语言联合汇编】
- 关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- 转载:关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- C语言switch case语句中定义变量问题
- C语言switch case语句中定义变量问题
- C语言switch case语句中定义变量问题
- C语言switch case语句中定义变量问题
- 7_13发现了一个小问题为啥在do_line函数里赋值语句在变量定义语句之前就会报错?
- C语言全局变量的定义与声明
- 【c语言问题系列教程之一】变量声明和初始化
- switch语句中在case块里声明变量会遇到提示“Expected expression before..."的问题
- C语言头文件中定义变量问题
- C语言中变量定义与声明的区别
- 关于Python函数定义全局变量执行弹出SyntaxWarning的问题
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- C语言中变量定义与声明的区别
- C语言中变量和函数的声明与定义
- oracle 报Ora-01008错误:oracle 并非所有变量都已绑定的原因.TO_number();动态执行select..into..语句时
- SQL允许你用EXECUTE执行一个变量中定义的SQL语句,并且允许你在被执行的SQL语句中,再次嵌套入一个变量定义的语句,并且再次在其中用EXECUTE执行它