根据 cpp 标准的规定, 一个变量声明必须满足两个条件, 否则就是定义:
- 必须使用 extern;
- 不能为变量赋予初始值;
一个变量 / 函数可以被多处声明, 但是只能定义在一处;
是定义还是声明与其位于
header file
还是implementation file
无关.
根据以上规定, 我们可以有如下的结论:
- extern int a; // 声明
- int a; // 定义
- int a = 0; // 定义
- extern int a = 0; // 定义
许多程序员对定义变量和声明变量混淆不清, 定义变量和声明变量的区别在于:
- 定义会产生内存分配的操作, 是汇编阶段的概念;
- 声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量.