extern翻译成中文就是“外部”,在c++中的意思就是所使用的变量和函数是外部的,而不在本文件中定义和声明的。
举个例子:
//name.h
....
void print();
//name.cpp
int i = 10;
void print()
{
std::cout << 11 << std::endl;
}
//testExtern.h
extern int i; //注意,此处不需要包含name的头文件
void print(); //函数可以省略extern,和前加extern是一个意思
class testExtern
{
public:
testExtern();
void printI();
}
//testExtern.cpp
#include "testExtern.h"
#include <iostream>
testExtern::testExtern()
{
}
void testExtern::printI()
{
std::cout << i << std::endl;
print();
}
//main.cpp
....
编译器在编译以上文件的是会干些什么?在编译testExtern.cpp的时候,会把它所包含的所有头文件加进来生成一个中间文件(在windows下常见的obj文件和linux下的o文件就是这种),生成的过程中,当他看到cout的i的时候,就查找其定义,发现有关键词extern修饰,所以就随便给它一个地址,留待链接的时候在外部的中间文件中找到真正的地址填入该处。
对函数也是相同的用法,唯一的区别就是,extern对于函数来说可以省略。