为了澄清,使用extern int x;告诉编译器存在一个名为x的int类型的对象。编译器不需要知道它在哪里,它只需要知道类型和名称,这样它就知道如何使用它。一旦所有源文件都编译完成,链接器将解析x的所有引用到它在已编译的源文件中找到的一个定义。为了让它工作,x变量的定义需要有所谓的“外部链接”,这基本上意味着它需要在函数之外(通常称为“文件作用域”)声明,并且没有static关键字。
标题:
#ifndef HEADER_H
#define HEADER_H
// any source file that includes this will be able to use "global_x"
extern int global_x;
void print_global_x();
#endif
源1:
#include "header.h"
// since global_x still needs to be defined somewhere,
// we define it (for example) in this source file
int global_x;
int main()
{
//set global_x here:
global_x = 5;
print_global_x();
}