变量声明和定义的主要区别:

声明不分配存储空间,定义分配存储空间。

变量可以声明多次,但只能定义一次(一个变量只能在一个源文件中定义)

声明通常放在头文件(.h)中,定义放在源文件(.cpp)中

变量声明(纯声明,有extern关键字):

extern int i; //不分配存储空间

定义:

int i;       //无extern关键字,分配存储空间

extern int i = 1; //虽然有extern,但是变量被初始化,还是变量的定义

(变量的定义其实已经包含变量的声明,此处“定义”即为包含声明的定义,也可理解为变量定义必然包含一次声明)

 

区别变量声明和定义的方法:

变量声明:含有extern关键字且变量没有初始化

变量定义:不含extern关键字或者含有extern关键字但是变量被初始化

 

const变量和普通变量(为文件中的全局变量的情况):

普通变量默认为extern属性(即该变量可以在定义该变量的文件之外的文件使用,是所有源文件的全局变量,前提:该变量在另一个变量中被声明);

const变量默认不含extern属性(即该变量默认为定义该变量的文件的变量(只能在该文件中使用),只是该源文件的全局变量)

 

头文件通常包含变量的声明,类的定义,const变量的定义

(注:不能包含普通变量的定义,由于普通变量默认为extern属性,也就是所有文件的全局变量,当多个文件同时包含该头文件时,该普通变量会被重复定义,编译出现错误;但是头文件可以包含const变量的定义,由于const变量默认不含extern属性,即cosnt变量只是定义它的那个文件的全局变量,所以当多个文件同时包含该头文件时,cosnt变量不会被重复定义;简而言之,含extern属性的变量不能被多个文件重复定义;不含extern属性的变量可以被多个文件重复定义,相当于每个文件自己定义了一个只属于该文件本身的全局变量)

 

const变量也可被显式地定义为extern变量,即extern const int i = 1; 此时该const变量拥有extern属性。

posted on 2013-09-15 01:38  ximenchuixie  阅读(1094)  评论(0编辑  收藏  举报