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

0 0
原创粉丝点击