1 2 3 4 5 6 7 8 9 10
| int i;
extern int j;
int k = 7;
int l;
l = 100;
|
- 引用性声明不分配存储空间,如:
extern int x;
只是告诉编译器变量x
是整型,已经在其它地方定义了。
- 定义是在内存中确定变量的位置、大小。
- 初始化是定义变量的时候赋给变量的值,强调从无到有这一过程。
- 赋值是初始化后用到该变量,赋给该变量新的值。
定义 vs 声明
- 变量的声明有两种情况
- 一种是需要建立存储空间的:
int a;
- 另一种是不需要建立存储空间的:
extern int b;
- 前者是定义性声明(defining declaration),或者称为定义(definition),而后者是引用性声明(referencing declaration)。从广义的角度讲,声明中包含着定义,但不是所有的声明都是定义,因此这里所说的声明和定义,都是狭义上的,声明特指不需要建立存储空间的引用性声明;定义则指需要建立存储空间的定义性声明。
-
1 2 3 4 5 6 7 8 9 10 11 12 13
| void func1() { extern int a; } void func2() { extern int a; }
int a;
|
- 外部变量(普通全局变量)的定义只能有一次,其位置肯定在函数之外;而同一个文件中对一个外部变量的声明可以有多次,既可以在函数之内(哪个函数要用到就在那个函数中声明),也可以在函数之外(在外部变量的定义点之前)。
- 函数的声明和定义则相对区分明显。
-
1 2 3 4 5 6
| int getStringLen();
int getStringLen() { }
|
References