1.typedef
语法
: typedef <原本数据类型的名字> <新数据类型的名字>;
2.static
作用
: 直接修饰 "变量" 和 "函数"
内存分为 :
"栈区"局部变量的存放地方 (进去创建,出来销毁)
"堆区"
"静态区"静态变量 (生命周期变成 进入作用域创建 出作用域不销毁,程序销毁时才销毁)
用法①
:static 修饰的局部变量进入静态区,生命周期变成程序的生命周期
用法②
:static 修饰全局变量, 会将"外部链接属性",变成了"内部链接属性"
(使全局变量的作用范围由该程序,变成该文件)
原本可以在需要使用的文件中 "extern"一个变量, 然后即可使用
后变成只能在该程序的该文件中使用 -- 内部链接属性
//test1.c //同程序的一个文件
int Add(int x, int y)
{
return x + y;
}
//test2.c //同程序的另一个文件
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
extern int Add(int x, int y); //在需要的文件中,声明全局函数
int c = Add(1, 2);
printf("%d", c);
return 0;
}
static int Add(int x, int y)
{
return x + y;
}
//此时另一个文件即报错
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "int __cdecl Add(int,int)" (?Add@@YAHHH@Z),函数 _main 中引用了该符号 Project1 E:\code\c语言学习\Project1\test2.obj 1
3.register -- 寄存
寄存器(集成到CPU上) 快 空间小造价高 CPU直接用
高速缓存(cache) |
内存 |
硬盘 慢 空间大造价低 从下往上传
用处
:现代编译器一般会根据优化算法自动选择是否将变量存储在寄存器中,所以在大多数情 况下,手动使用 "register" 关键字并不会对程序的性能产生明显影响,并且有些编译器甚至忽略这个关键字
register总结
: 没什么用了(
4.#define --- 定义标识符常量和宏
在预处理左右细讲一下这个