9、C语言:变量的作用域及编译预处理
变量作用域和存储类型
-
全局变量:在函数外面定义的变量
1)生存期是到本文件结束
2)若全局变量和局部变量同名,则在局部变量的作用范围内,同名的全局变量不起作用
3)没有赋初始值的全局变量默认有0值 -
局部变量:在函数内部定义的变量
1)函数的形参也是局部变量
2)作用域只在本函数内有效,生存期是到本函数结束
3)在复合语句内部定义的变量,作用域是在复合语句的大括号内
4)局部变量不会默认初始化,编译的时候也不会为局部变量分配内存单元 -
变量的存储类型
1)静态存储方式:由系统分配固定的存储空间,从程序开始到程序结束。
2)动态存储方式:需要动态进行分配存储空间,从包含该变量定义的函数开始执行到函数结束 -
全局变量的存储方式
1)外部全局变量:引用其他文件中的全局变量extern int x;
2)静态全局变量:定义一个全局变量只能被定义它的文件引用;其他文件即使用extern也不能使用static int y;
3)注意:默认的全局变量也是静态变量,但可能被extern引用 -
局部变量的存储方式
1)自动变量:函数中不做说明的局部变量都是自动变量
2)静态局部变量:static 类型说明符 变量名
,只能一次赋值。作用域和全局变量不同
3)寄存器变量:register 类型说明符 变量名
内部函数与外部函数
- 内部函数
只能被本文本中其他函数调用的函数,也成为静态函数static 函数类型 函数名([参数表])
- 外部函数
允许被其他文件调用的函数,默认的函数就是外部函数[extern] 函数类型 函数名([参数表])
- 外部函数的使用
编译预处理
预处理是在编译之前对程序中特殊命令进行的处理工作
以#开头的都是C语言编译预处理命令
- 宏定义:
#define 宏名 字符串/数字
- 带参数的宏定义:
#define 宏名(形参表) 字符串/数字
- 终止宏定义:
#undef 宏名
- 文件包含:
#include<文件名>
或#include"文件名"
第一个会在系统指定目录下查找文件
第二个会在当前目录下查找,再去系统指定目录查找
不一定要放在文件最开头 - 条件编译:满足一定条件才编译指定的代码