外部存储类说明符
extern 存储类说明符允许您声明多个源文件可以使用的对象。 extern 声明使描述的变量可由当前源文件的后续部分使用。 此声明不会替换定义。 声明用于描述外部定义的变量。
extern 声明可以出现在函数外部或块的开头。 如果声明描述函数或出现在函数外部,并描述具有外部链接的对象,那么关键字 extern 是可选的。
如果在文件作用域中已存在标识的声明,那么在块中找到的相同标识的任何 extern 声明都将引用同一对象。 如果在文件作用域中不存在该标识的其他声明,那么该标识具有外部链接。
C++将 存储类说明符的使用限制为对象或函数的名称。 extern 将 extern 说明符与类型声明配合使用是非法的。 extern 声明不能出现在类作用域中。
外部变量的存储持续时间
所有 extern 对象都具有静态存储持续时间。 在 main 函数开始运行之前,将为 extern 对象分配内存,并在程序终止时释放内存。 变量的作用域取决于程序文本中声明的位置。 如果声明出现在块中,那么变量具有块作用域; 否则,它具有文件作用域。
外部变量的链接
与作用域一样,变量声明 的链接取决于声明在程序文本中的位置。 extern 如果变量声明出现在任何函数定义外部,并且已在文件中较早声明 static ,那么该变量具有内部链接; 否则,在大多数情况下,它具有外部链接。 在函数外部出现且不包含具有外部链接的存储类说明符声明标识的所有对象声明。
对于未命名命名空间中的对象,链接可能是外部链接,但名称是唯一的,因此从其他翻译单元的角度来看,该名称实际上具有内部链接。
备注:
关键词
关键词 extern 之前用作存储说明符或链接说明符的一部分。 C++11 标准添加了第三个用法,以使用此关键字来指定显式实例化声明。 有关更多信息,请参阅 显式实例化 (仅限 C + +)。