c++变量的声明和定义,变量外连接特点的使用方法,extern声明变量,单定义原则:
变量的声明和定义并没有函数的声明与定义那么常见,但全局变量发挥其外连接的特性,是需要结合其声明和定义的结合使用的。
变量的定义+声明:
int i;
int i = 10;
extern int i = 10;
这三种写法都是定义+声明写法,简称定义,特点是:为该变量分配了存储空间。
变量的声明:
extern int i;
变量声明必须使用extern关键字和不使用赋值号,就是声明写法,简称声明,特点是:没有为该变量分配空间,让它引用已有的变量,前提是标识符,也就是变量名相同。
单定义原则:
和函数声明与定义一样,变量的声明可以多次,定义只能有一次,否则编译报重定义错误,因此定义变量的语句只能有一处,其他地方只能是extern修饰的变量声明,
声明后可以赋值,但不可以在声明的时候就是用赋值号,因为这相当于再次定义变量,例如:
下面这个写法是正确的。
extern int iValue;
iValue = 100;//这个写法是正确的。
//下面这个写法会导致重定义报错。
extern int iValue = 100;//这个写法会导致重定义报错。
全局非静态变量具有外连接的属性,但直接在其编译单元以外的文件,就是没有直接或间接包含该变量定义的文件中,不能直接使用该变量,如图:
想要在其它文件中使用该变量,需要在其他文件中声明,例如:
extern int iValue;
void func()
{
cout<<iValue<<endl;
}
只要声明,就可以在之后的函数中调用了,声明的变量会自动引用其定义的值,到达在编译单元外的文件中使用全局变量的目的,但是需要注意的是,全局变量的声明和定义必须在写在同一个程序文件中,如果定义或声明无意间写在了程序外,或者其书写的文件部分没有连接到同一程序,编译器就会报编译错误。