引用声明与定义声明的区别及如何使用extern引用外部全局变量
两种声明:
1.定义声明:简称定义,编译器给变量分配存储空间;
2.引用声明:简称声明,编译器不分配存储空间,但可引用已定义的变量。
声明可以多次,但是定义只能一次,对变量来说,必须加extern才是引用声明,对函数来说,函数声明默认就是extern。
当在不include含有全局变量或函数定义的头文件时,而这个全局变量或函数在某个源文件存在定义,则使用它之前都必须提前对他做引用声明才能使用此外部全局变量或函数,如:
在definition.cpp里定义声明
int blem = 3;
int fun(int a, int b)
{
return a + b;
}
在externdefinition.cpp做引用声明:
extern int blem;
int fun(int a,int b);
这样就可以在externdefinition.cpp使用定义好的变量或函数了。
definition.cpp如下:
externdefinition.cpp如下:
运行结果如下:
需注意的是:
1.如果在同一工程下的其他源文件中,使用外部全局变量而不加extern,则变成了一种定义声明,同一工程下,不允许同一变量的多个定义。
2.如果在externdefinition.cpp中定义了局部变量,则将隐藏外部全局变量声明,此时可以通过作用域解析运算符(::)就可以使用变量的全局版本。
3.局部变量的声明不能有extern的修饰,局部变量在运行时才在堆栈部分分配内存。
4.extern对静态全局变量和静态全局函数不起任何作用。