extern : extern int i; // declares but does not define i
int i; //declares and defines i
extern 声明不是定义, 也不分配存储空间。它只是说明变量定义在程序的其他地方。程序中变量可以声明多次, 但只能定义一次。
定义: 定义是负责创建与名字相关的实体。
变量声明规定了变量的类型和名字, 在这一点上定义与之相同。 但是除此以外, 定义还需申请内存空间, 也肯能会同时给变量赋初值。
声明和定义之间的区别可能看起来微不足道,但是事实上确是举足轻重的。
任何多个文件中使用的变量都需要有定义分离的声明, 在这种情况下, 一个文件含有变量的定义, 使用该变量的其他文件则包含该变量的声明。
const 对象默认为文件的局部变量。
除非特别声明, const 在全局作用域声明的变量,是那个定义该对象文件的局部变量。 此变量只存在于那个文件中不能被其他文件访问。
通过制定const变量为extern, 就可以在整个程序中访问const 对象。
//file_1.cc
//define and initializes a const that is accessible to other files
extern const int bufSize =fcn();
// file_2.cc
extern const int bufSize;
//use bufSize defined in file_1
for (int index = 0 ; index != bufSize; ++index)
//…..