【技术研究】宏定义

TEC

Posted by Corax on November 10, 2023

编译器通过名称粉碎做到局部静态变脸不跨函数访问。

​ 通过标志位使 静态局部变量初始化为静态值

初始化在数据区的未初始化区。(因为初始化为0)

image-20231111183120650

寄存器变量不能是 全局或者静态局部,占用时间过长

但是鸡肋得很。

宏定义

错误码宏

image-20231111184733534

image-20231111184757350

详细编码

image-20231111184813640

1.数值型宏 编译器进行替换 编译途中生成.i文件,就是完全已经替换成功的文件、

image-20231111185203357

2.表达式宏 需要注意的如下 是没有运算优先取舍的。

image-20231111185408613

还有一个坑,也是直接展开,所以宏使用的时候记得用括号。

image-20231111185624858

image-20231111185634401

3.语句块宏

斜杠是续行符,其实也可以写成一行。

image-20231111185857038

4.说明性宏,只做说明

image-20231111190508269

5.兼容性宏 需要修改的时候不需要改太多代码,不同平台,提高兼容性

image-20231111191046275

连接符

image-20231111192135712

i在VC6是块块作用域,在VS2019是函数作用域

image-20231111201722355

6.预编译宏

条件编译指令 也算是用来避免重复包含

image-20231111202953167

为一则编译

image-20231111203021540

用来控制编译分支

7.编译选项宏

编译前这个宏就准备好了,用来解决预编译宏的先后问题

image-20231111203407376

image-20231111203431377

#undef 取消定义 经常用于避免冲突(不晓得前面有没有定义)经常和编译选项宏走

8.编译内置宏 如下显示编译器版本

image-20231111204312460

代码行为 .cpp

声明 .h 不要有实质性代码