C ++中的外部存储类

使用外部存储类说明符,可以声明多个源文件可以使用的对象。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。