extern关键字告诉编译器存在一个变量和函数,即使编译器在当前文件没有看到它。
这个变量或函数可能在另一个文件中或者在当前文件后面定义
//: C03:Forward.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Forward function & data declarations
#include <iostream>
using namespace std;
// This is not actually external, but the
// compiler must be told it exists somewhere:
extern int i;
extern void func();
int main() {
i = 0;
func();
getchar();
}
int i; // The data definition
void func() {
i++;
cout << i;
} ///:~
遇到'extern int i'时,知道i肯定作为全局变量在某处
当编译器看到变量i的定义时,并没有看到别的声明
如果i定义为static,又要告诉编译器,i是全局定义的(通过extern)。
但是static,有文件作用域,编译器会产生错误。
输出
1