C++声明和定义的区别
2014-10-19 13:31
183 查看
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
变量的定义(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
相关文章推荐
- What's the difference between declaring and defining something in C and C++?(C和C++中,声明和定义的区别)
- C语言和C++在声明和定义之间的区别
- c++ 声明和定义的区别
- C/C++ 中变量的声明、定义、初始化的区别
- C++中的声明和定义的区别
- [转载]C++声明和定义的区别
- c++ 中的 声明和定义 区别
- c++中的声明与定义区别3
- 类成员声明与定义前加inline的区别(C++ inline 函数)
- C++中声明与定义的区别
- C++中声明和定义的区别
- c++ 声明与定义的区别
- C++ 中变量的定义与声明区别
- C++声明和定义的区别
- C/C++中的“定义”“声明”如何区别
- C++中声明与定义的区别
- C++中声明和定义的区别
- C++声明和定义的区别
- C++中声明与定义的区别
- C++中声明和定义的区别2