extern声明&定义
extern
- extern 声明不是定义,也不分配存储空间。
- 事实上,它只是说明变量定义在程序的其他地方。
声明&定义
-
变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。
-
变量的声明:用于向程序表明变量的类型和名字。
-
程序中变量可以声明多次,但只能定义一次。
-
定义也是声明,当定义变量时我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。
extern int i; //声明一个变量i,但是并没有定义
int i; //声明并且定义了一个变量i
- 只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。
- 初始化式必须要有存储空间来进行初始化。
- 如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。
extern int i = 0; // 有初始化式,即使有extern,其也既是声明又是定义
int i; //报错,重复的定义 // 已初始化的extern声明被当作是定义,所以该变量任何随后的定义都是错误的
/****************************/
extern int i = 0; // 声明+定义
extern int i; // 只声明,正确
extern int i = 0; // 重复定义,错误