首先,一个文件中的变量或者函数,它的可视范围只在这个文件中,其他文件是不会知晓定义在另一个文件中的变量和函数的。
extern
关键字的作用就是,告知编译器,这里有一个变量或者函数的声明,它的定义你得去其他合作者那里去找。这就是所有了。
C++或者C是一个组合多文件进行合作编程的语言。他们的合作是由编译器进行组织的。所以我们会发现编译器玩的是 .cpp
文件。
并且,如果我们需要使用一个变量或者函数,它必须在这个 .cpp
文件中有它的声明(declaration),才可以使用,这是前提,当然他也一定要相关的有定义(definition)。
每一个 .cpp
文件(包含着许多变量和函数的定义)都自成体系,可以被编译成 库文件(二进制文件), 完成了从 ASCII 到 二进制的升华,便于其他文件的使用,而使用说明书被抽象成 .h
。
比较关键的是
int i; // 既是声明也是定义
int j = 1; // 既是声明也是定义
void int add(int a, int b); // 只是声明
代码
TestExtern
|____ main.cpp
|____ other.cpp
|____ CMakeLists.txt
// main.cpp
#include<iostream>
extern int a;
int main(){
std::cout<< a << std::endl;
return 0;
}
// other.cpp
int a = 5;
# CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(testExtern)
add_executable(testExtern main.cpp other.cpp)
other.cpp
被编译成 静态库 或者 动态库 链接到 main.cpp
上也可以执行。