声明/定义/初始化/赋值

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

文章目录
  1. 1. 定义 vs 声明
  2. 2. References