C++声明和定义的区别
来源:互联网 发布:汽车导航软件下载 编辑:程序博客网 时间:2024/06/17 02:51
c++程序通常由许多文件组成,为了让多个文件访问相同的变量,c++区分了声明和定义。
变量的定义(definition)用于为变量分配存储空间,还可以为变量指定初始值。在程序中,变量有且仅有一个定义。
声明(declaration)用于向程序表明变量的类型和名字。定义也是声明:当定义变量的时候我们声明了它的类型和名字。可以通过使用extern声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。
extern声明不是定义,也不分配存储空间。事实上它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。
只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。
任何在多文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。
说明:个人感觉好像就是extern存在声明和定义不是一回事,其它几个声明和定义就是一回事
auto (自动类作用域在函数体内和分程序内,)
register (作用域在函数体内和分程序内)
static (内部静态类作用域在函数体内和分程序内,外部静态态作用域在定义它的类中,但其生命周期却一样)
extern (作用域在整个程序内,包含该程序的各个文件)
在其个文件中使用extern变量时,必须先声明,还有就是如果使用在前,定义在后时也要声明。
在函数体外的一个变量如果不加存储内型,默认便为extern,在函数体内如果一个变量不加存储说明
则默认为auto
{
int a = 5;//声明加定义加初始化
int b ;//声明加定义
b = 4; //赋值
}
extern int a ;//声明
extern int i =1;//定义
附:如果一个变量被定义但没有被初始化,也没有被赋值,则存储类为静态的和extern的变量值为默认值
(数值量为0,字符量为null),存储类为auto和register的为无效值,即值是随机的,此值不可使用,变量被赋值和有默认值称为有效值
转自:http://springlost.javaeye.com/blog/604039
说明:个人感觉好像就是extern存在声明和定义不是一回事,其它几个声明和定义就是一回事
auto (自动类作用域在函数体内和分程序内,)
extern (作用域在整个程序内,包含该程序的各个文件)
在其个文件中使用extern变量时,必须先声明,还有就是如果使用在前,定义在后时也要声明。
在函数体外的一个变量如果不加存储内型,默认便为extern,在函数体内如果一个变量不加存储说明
则默认为auto
int b ;//声明加定义
extern int a ;//声明
extern int i =1;//定义
附:如果一个变量被定义但没有被初始化,也没有被赋值,则存储类为静态的和extern的变量值为默认值
(数值量为0,字符量为null),存储类为auto和register的为无效值,即值是随机的,此值不可使用,变量被赋值和有默认值称为有效值
转自:http://springlost.javaeye.com/blog/604039
0 0
- 声明和定义的区别(C++)
- C语言定义和声明的区别
- 定义和声明的区别
- 声明和定义的区别
- 声明和定义的区别
- 声明和定义的区别
- 声明和定义的区别
- 定义和声明的区别
- 声明和定义的区别
- 定义和声明的区别
- 声明和定义的区别
- 声明和定义的区别
- 声明和定义的区别
- 定义和声明的区别
- 定义和声明的区别
- 声明和定义的区别
- 声明和定义的区别
- 定义和声明的区别
- android 4.4 sdk截图和jni截图实现
- C. Table Decorations(Codeforces)(规律)
- Http协议详解
- 黑马程序员——对于java语言的理解
- oracle rac ssh 免密码登陆设置
- C++声明和定义的区别
- leetcode_动态规划
- 在eclipse中启动Tomcat 更换端口的问题
- 黑马程序员——对于函数的理解
- ubuntu 用root登录
- 2-09. 装箱问题模拟(20)
- inno setup 打包工具介绍
- Client向HDFS写入数据的过程解析
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第11章节--为Office和SP解决方案开发集成Apps Office新的App模型