1. 预处理(per-processing)(宏定义,头文件替换)
命令【gcc -E】--> gcc -E hello.c -o hell.i
预处理错误处理:gcc -I跟查找头文件的目录 --》gcc -I./inc -o hello.c
#include 包含头文件
#define 宏;替换
#ifdef #else #endif
预定义宏: printf("%s ,%s, %d\n",__FILE__,__LINE__,__FUNCTION__);
__FUNCTION__ :函数名
__LINE__ :行名
__FILE__ :文件名
2. 编译(compiling)(.c文件编译成汇编文件.s)
命令【gcc -S】--> gcc -S hello.i -o hello.s
3.汇编(assembling)(.s汇编文件变成.o文件)
命令【gcc -c】--> gcc -C hello.s -o hello.o
4.链接(linking)(链接.o依赖文件成二进制可执行文件)
命令【gcc -o】--》gcc hello.o -o hello
--->gcc hello -o hello.c (命令自动向上兼容)
5. 添加宏定义参数(通过编译器添加宏变量)
命令:gcc -D
gcc -DABC1 == #define ABC1
6. 宏展开下的# ,##
# 字符串化
##连接符号
eg: #define ABC(x) #x --->printf(ABC(ab\n)); 输出ab
#define ABC(x) day##x -->printf(ABC(10\n)); 输出day10