一.熟悉预处理标识符:
LINE //文件当前行号
FILE //进行编译的源文件
DATE //文件被编译的日期
TIME //文件被编译的时间
# //将其后面的宏参数进行字符串化操作
## //把位于它两边的符号连接成一个符号
二.宏和函数的区别
1)、代码长度:宏是完全替换,插入到程序里使得代码变长;函数代码是只出现在一个地方,使用时则去那里调用。
2)、执行速度:宏更快一些,因为在预编译阶段都已完成; 函数则慢一点,,因为需要调用以及返回(压栈/出栈)额外时间。
3)、操作符优先级:宏有时要少加括号而导致计算逻辑出错; 函数最后只将值返回来,结果容易预测。
4)、参数求值:宏每次都要计算;函数只需要计算一次,之后多次调用并不会导致多次求值而出错。
5)、参数类型:宏不关心类型,只要参数操作合法就可以;函数类型要一致,不同类型则需要不同函数。
三.过程
1).预处理
在此步骤对代码进行预处理:头文件展开,宏替换,去注释,条件编译;
gcc -E test.c -o test.i
此命令是对test.c进行到预处理,并将处理结果放到test.i中。
2).c代码转换为汇编;
gcc -S test.i -o tets.s
此命令是对test.i进行汇编转换,并将汇编转换结果放入test.s中。
3).汇编——>二进制;
gcc -c test.s -o test.o
此处test.o是目标文件,其中存放的是二进制序列;
4).链接
链接所有二进制程序,生成可执行文件。
头文件展开:展开为头文件所在的绝对地址,在Linux下#include