C语言中变量声明和定义
2013-04-02 09:40
267 查看
C语言中变量声明和定义
很多初学者,对变量的定义和声明分不请,C和C++中略有不同,再加上const、static、extern就更加混乱,下面就此问题给予详细讲解并举例说明。
变量的定义:为变量分配存储空间,同时指明变量的类型和名字。另外变量的初始化,就是在变量的定义处给出值。
变量的声明:它主要向程序声明变量的类型和名字。
static修饰符:static int a;将变量的作用域限制在一个源文件内,对其他源文件a是不可见的。
严格的规则:变量有且只能有一次定义,但是可以声明多次,使用变量前必须定义或声明。一个项目中可以有多个源文件,但在所有的源文件中只允许出现一次对某个变量的定义。
举例说明:
**************************************************************************
int i; //定义
int i=2; //定义
static int i; //定义
extern int i=8; //定义
extern int i; //这就是单纯的声明
*************************************************************************
问题1:如果外部变量的定义各指定一个初始值?大多数系统都会拒绝接受该程序。
问题2:如果一个外部变量在多个源程序中定义却未指定初始值?某些系统可能会接受,例如VC6.0
同样的程序在VC++无法编译通过。
如果要在所有的C语言实现中避免上述问题,惟一的解决办法就是每个外部变量只定义一次。
问题3:同一变量名在不同文件中声明为不同的类型?需要程序员自己检查。
解决上述问题,只需接受一个简单的规则:每个外部变量只在一个头文件中声明,需要用到外部变量的地方都应该包括这个头文件,特别指出,定义该外部变量的模块也应该包括这个头文件。
为什么C中的const全局变量不需要赋初值,而C++中的const全局变量需要赋初值?
很多初学者,对变量的定义和声明分不请,C和C++中略有不同,再加上const、static、extern就更加混乱,下面就此问题给予详细讲解并举例说明。
变量的定义:为变量分配存储空间,同时指明变量的类型和名字。另外变量的初始化,就是在变量的定义处给出值。
变量的声明:它主要向程序声明变量的类型和名字。
static修饰符:static int a;将变量的作用域限制在一个源文件内,对其他源文件a是不可见的。
严格的规则:变量有且只能有一次定义,但是可以声明多次,使用变量前必须定义或声明。一个项目中可以有多个源文件,但在所有的源文件中只允许出现一次对某个变量的定义。
举例说明:
**************************************************************************
int i; //定义
int i=2; //定义
static int i; //定义
extern int i=8; //定义
extern int i; //这就是单纯的声明
*************************************************************************
问题1:如果外部变量的定义各指定一个初始值?大多数系统都会拒绝接受该程序。
问题2:如果一个外部变量在多个源程序中定义却未指定初始值?某些系统可能会接受,例如VC6.0
同样的程序在VC++无法编译通过。
如果要在所有的C语言实现中避免上述问题,惟一的解决办法就是每个外部变量只定义一次。
问题3:同一变量名在不同文件中声明为不同的类型?需要程序员自己检查。
解决上述问题,只需接受一个简单的规则:每个外部变量只在一个头文件中声明,需要用到外部变量的地方都应该包括这个头文件,特别指出,定义该外部变量的模块也应该包括这个头文件。
为什么C中的const全局变量不需要赋初值,而C++中的const全局变量需要赋初值?
相关文章推荐
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- C语言中变量和函数的声明与定义
- C语言定义结构体时注意成员变量的类型和声明顺序
- 关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
- C语言中的强符号与弱符号(关于变量声明与定义的深入讨论)
- C语言中变量和函数的声明与定义
- C语言如何跨文件调用函数定义中声明的变量
- keil 中——C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
- 转载:关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- c语言变量的声明和定义
- 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
- C语言中变量声明和定义----笛风读书笔记系列
- C语言中变量的复杂声明和定义
- C语言中变量的定义和声明
- C语言中变量的声明和定义
- C语言学习笔记:13_变量和函数的声明与定义
- C语言中变量定义与声明的区别
- C语言 变量声明和定义的区别
- C语言中变量声明和定义