使用外部存储类说明符,可以声明多个源文件可以使用的对象。extern声明使所描述的变量在当前源文件的后续部分中可用。此声明不替代定义。该声明用于描述外部定义的变量。
extern声明可以出现在函数外部或块的开头。如果声明描述了一个函数或出现在一个函数之外,并且描述了具有外部链接的对象,则关键字extern是可选的。
如果在文件作用域中已经存在标识符的声明,则在块中找到的相同标识符的任何外部声明都引用同一对象。如果在文件作用域中不存在标识符的其他声明,则标识符具有外部链接。
C ++将外部存储类说明符的使用限制为对象或函数的名称。将extern说明符与类型声明一起使用是非法的。extern声明不能出现在类范围内。
您可以按以下方式使用extern关键字在文件之间共享变量-
file3.h
extern int global_variable; /* 变量声明 */
file1.c
#include "file3.h" /* 声明在这里可用 */ #include "prog1.h" /* Function declarations */ /* Variable defined here */ int global_variable = 37; /* 对声明进行检查的定义 */ int increment(void) { return global_variable++; }
file2.c
#include "file3.h" #include "prog1.h" #include <stdio.h> void use_it(void) { printf("Global variable: %d\n", global_variable++); }
以下关于stackoverflow的问题完全抓住了extern关键字的本质:stackoverflow.com/questions/1433204/how-do-i-use-extern-to-share-variables-between-source-files。