在C++中,如何定义一个跨源文件的全局可用的变量,方式就是通过extern关键字。但是extern只是执行一种声明,声明这个变量可以分开编译,也就是如果有全局变量,如果要在超过一个源文件中使用,首先要做的是对这个变量进行extern declaration(注意是声明)。随后可以对这个变量声明初始化。
使用规则
使用时,extern变量声明和变量定义最好各自独立对待,而不要混合使用。
这是一个很容易混淆的地方,变量声明和变量定义有明确的区分,虽然变量定义可以理解为在变量声明的基础上进行,但是变量定义意味着变量声明和存储及值初始化同时进行,是一个整体,不能分开。
也就是说变量定义不能先使用单纯声明方式,然后对变量名称直接进行赋值操作。这会导致编译错误,因为变量没有寻址内存,必须对变量进行定义。
extern int j; //加了extern关键字意味着只声明不定义,这个变量声明不能直接赋值,比如直接以j=0使用。
int j; //这是变量定义,虽然没有明确初始化。就是说在声明的同时,也进行了内存寻址和值的初始化,虽然这是隐含动作。
但是extern关键字也支持合并方式直接做变量定义,也就是既有分开编译的声明支持,也有在本处文件中的变量定义。
extern int j = 0;
声明和定义的区别:
一个声明只是确定变量的名称和类型。而一个定义则是在声明的基础上进一步关联了存储和初始值
网友评论