环境:CLion2021.3;64位macOS Big Sur
「地表最强」C语言(一)基本数据类型
「地表最强」C语言(二)变量和常量
「地表最强」C语言(三)字符串+转义字符+注释
「地表最强」C语言(四)分支语句
「地表最强」C语言(五)循环语句
「地表最强」C语言(六)函数
「地表最强」C语言(七)数组
「地表最强」C语言(八)操作符
「地表最强」C语言(九)关键字
「地表最强」C语言(十)#define定义常量和宏
「地表最强」C语言(十一)指针
「地表最强」C语言(十二)结构体、枚举和联合体
「地表最强」C语言(十三)动态内存管理,含柔性数组
「地表最强」C语言(十四)文件
「地表最强」C语言(十五)程序的环境和预处理
「地表最强」C语言(十六)一些自定义函数和宏
「地表最强」C语言(十七)阅读程序
九、关键字
- 关键字是C语言提供的,不支持自定义关键字。
- 关键字不能做变量名
- 常见关键字:
注意:define和include是预处理指令而非关键字
1.do 2.while 3.for 4.break 5.continue 6.return 7.if 8.else
9.switch 10.case 11.default 12.goto 13.const 14.static 15.enum 16.struct
17.sizeof 18.signed(有符号) 19.unsigned(无符号) 20.typedef(类型重命名)
21.union(联合体/共用体) 22.extern(声明外部符号) 23.register(寄存器)
24.auto(自动创建和销毁,局部变量前都有,只是被省略) 25.volatile
9.1 register
计算机的数据可以存储到:寄存器、高速缓存器、内存、硬盘、网盘。造价递减,速度递减,存储空间递增。
当有数据需要频繁被使用时,希望放在寄存器中以提升效率,用到此关键字。
目前计算机会自动完成这一过程,因此此关键字意义不大。
9.2 typedef
可理解为起别名:
typedef unsigned int u_int;//将unsigned int命名为u_int
unsigned int num = 100;
u_int num2 = 100;//有line1代码即可通过,否则报错。
9.3 static
首先,操作系统分配给C语言的内存空间被分为栈区(又称堆栈)、堆区、静态区。
- 栈区:存放局部变量、函数的参数、调用函数时的返回值等临时的变量。变量或函数被调用时创建,调用结束后时自动释放存储单元。
- 堆区:动态内存分配。运行malloc或new时申请任意内存,需要自己free或delete来释放内存。堆区涉及的函数:malloc、free、realloc、calloc
- 静态区(数据段):存放全局变量,static修饰的静态变量。内存在编译时就已经分配好,在程序的整个运行期间都存在,程序结束后系统释放内存。
9.3.1 static 修饰局部变量
改变了局部变量的生命周期,本质上是改变了局部变量的存储类型(栈->静态区),注意被static修饰的局部变量的值可以发生变化。
void test() {
static int a = 1;//存储在静态区,因此每次调用时不会初始化为1,而是保存上一次更改的结果。
++a;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10) {
test();
i++;
}
return 0;
}
9.3.2 static修饰全局变量
使得此全局变量只能在自己所在的源文件内部使用,其他源文件无法使用。
全局变量在其他源文件内部可以使用,是因为其具有外部链接属性,被static修饰后就变成了内部链接属性,其他源文件就无法链接到这个静态的全局变量了。
用static修饰时,直接报错:
取消static修饰,通过:
注意在引用其他源文件前,需要使用extern来声明外部符号:
extern int g_val;
9.3.3 static修饰函数
是的函数只能在自己的源文件内部使用,其他源文件无法使用此函数。
本质上与其修饰全局变量一样,将函数的外部链接属性更改为内部链接属性,在此不做演示。