您的位置:首页 > 编程语言 > C语言/C++

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: