5.4 (*)变量的存储属性
5.4.1 局部变量与全局变量
- 全局变量,外部变量:不属于哪一个函数,属于一个源程序文件。
- 作用域:从变量的定义处开始到本源程序结束
- 优点:增加了函数间数据联系的渠道,如果一个函数影响了全局变量的值,其他函数就会使用到这些修改的值
- 缺点:过多的全局变量会降低程序的清晰性
5.4.2 局部变量与全局变量重名时
在局部变量作用域内优先处理局部变量,全局变量不起作用。
5.4.3 变量的存储类型
- auto
- register
- static:在函数体内部使用时,称为静态局部变量。
在整个程序运行期间都在内存中的静态存储区占据着永久性的存储单元。
由于不释放这些存储单元,因而可以继续使用存储单元中原来的值
静态局部变量初值是在编译时赋予的,在程序执行期间不再赋初值
对未赋值的局部变量,C语言编译程序自动给他赋初值为0;
- extern
拓展全局变量的范围,引用另一个文件中的全局变量
拓展
extern介绍好文
static介绍好文
5.5 编译预处理
预处理命令不是C语言本身的组成部分,不能直接进行编译,要在编译前进行“预处理”
- 宏定义:用一个标识符代替一个字符串
处理过程:在预处理时将宏名替换成字符串的过程称为“宏展开”
不是C语句,所以不用再末尾加分号(如果加了分号,会把分号一起置换)
有效范围:定义命令到本源文件结束,可以用#undef命令终止宏定义的作用域
宏定义也可以嵌套,引用已定义的宏名#define pi 3.14 #define pi2 pi*2
带参数宏定义:替换过程从左向右