标识符
就是变量命名,可以使用的字符:数字、字母、下划线
变量命名只能由字母和下划线开头,对长度没有限制,对大小写敏感。
声明并定义并初始化
如 int a = 0;
声明并定义了变量 a,初始化值为0。
声明并定义
int a;
extern 仅声明变量
使用 extern
关键字,仅声明变量。如extern int a;
仅声明,是不能初始化的
作用域
主要看声明在哪里。若声明在函数花括号外,就是全局作用域;声明在函数花括号内,就是局部作用域。
没有 extern 的声明并定义
若 全局变量 a 声明并定义 在 源文件 s1中; (不考虑扩展名,这里只是作个说明)
源文件 s2中要使用全局变量 a,那么需要 #include "s1"
,即引入s1。
若在 s2中不引入 s1,且单独声明并定义全局变量 a,那么当两个源文件都被链接编译时,就会发生"重复定义同名变量的错误"。
有 extern 的声明
若 全局变量 a 声明在 源文件 s1中; (不考虑扩展名,这里只是作个说明)
也声明在 s2中;
这时没有定义,也是无法对其初始化的。
eg.
s1:
extern int a;
s2:
extern int a;
int a;
好处是:不需要为了使用全局变量,而引入整个源文件
全局变量和局部变量的默认初始化
- 全局变量不赋值时,可以被默认初始化。
需要变量的类型 支持默认初始化。对于内置类型都是支持的。标准模板库中STL是的模板类,也是支持的。
- 局部变量不赋值时,不会被默认初始化。直接使用可能引发错误。