带有extern的变量,其不用加头文件,编译器会自动去其他文件中查找,并进行调用。值得注意的两点:
(1) 带有初始值的extern声明,是一种定义;
如:extern int ival=10;//定义变量ival
等同于:int ival=10;
(2) extern声明必须与其定义分属于不同的文件;
如:extern int ival;
int ival=10;
是错误的写法。
1. extern声明变量
基本形式:extern int ival;
如:在文件file_1.cpp中定义:int ival=10;
在文件file_2.cpp中定义:extern int ival;
那么file_2.cpp即指file_1.cpp中的ival;
但若file_3.cpp中有int ival=20;结果如何呢?
出现了重定义-虽然我们没有加任何头文件。笔者程序例子是counter而已。
2. extern+static用法
解决1中的办法呢?很简单在file_3.cpp中有static int ival=20;便可以了。因为加上static后其作用域仅仅是file_3.cpp这个文件。
3. extern+const用法
加上const的全局变量仅仅对其所在文件有用。在定义时加上extern来说明其为其他文件所用:
//file_1.cpp
extern const int ival=100;
//file_2.cpp
extern const int ival;