test.i的内容都是来自/usr/include/stdio.h这个文件
汇编过程对test.s做处理。生成test.o(obj目标文件),里面内容是二进制指令(代码),汇编还形成了符号表
形成符号表
链接(两个过程,各个文件有自己的段,有自己的elf文件格式)
预定义符号(获取程序运行信息)
预编译阶段
预处理指令(#开头)
不要加封";"
定义宏(完全替换,而不是传参)
翻译环境+执行环境
翻译环境:编译(源代码–>目标代码)+链接(多个目标代码‘’.o.obj文件‘’进行链接包括目标库最后生成可执行程序exe)
编译:预编译(文本操作)+编译(每个C语言代码‘’源文件‘’生成汇编代码‘’目标文件‘’)+汇编(汇编代码–二进制指令)
带有副作用的宏参数
函数在调用的时候会有调用和返回的开销(查汇编代码)
宏可以传类型
命令行定义也是预编译阶段(参考linux命令行参数)
选择性编译代码(预处理指令里有条件编译指令)
stdio.h示例
防止多次包含
例题:宏替换求偏移量
把0–>0x0000赋值给s结构体首地址,然后根据结构体内存特点写了一个函数体求出了偏移量
位段打印
联合体