第四章-预处理
第四章-预处理
为巽一、C 语言编译过程
预处理、编译、汇编链接
gcc -E hello.c -o hello.i 1、预处理
gcc -S hello.i –o hello.s 2、编译
gcc -c hello.s -o hello.o 3、汇编
gcc hello.o -o hello_elf 4、链接
1、预编译
将.c 的头文件、宏展开
生成.i 文件
2、编译
将预处理的.i 文件生成 .s 汇编文件
3、汇编
将.s 汇编文件生成.o 目标文件
4、链接
.o 文件链接成目标文件
二、include
#include<> 用尖括号包括头文件,在系统指定的路径找到头文件
#include”” 用双引号包括头文件,先在当前目录下找到头文件,找不到再系统指定的路径下找
三、define
定义 宏用 define
1、不带参数的宏
1 |
|
2、带参宏
#define S(a,b) a*b
注意带参宏的形参 ab 没有类名
S(2,4)在预处理代替成字符串的形参 2 * 4
1 |
|
3、带参宏和代餐函数的区
带参宏被调用多少次就会展开多少次,执行代码的时候没有函数调用的过程,不需要压栈弹栈。带参宏,浪费空间
带参函数,代码只有一份,存放在代码段,调用的时候去代码段指令,调用的时候要压栈弹栈。带参函数浪费了时间,节省了空间
四、选择性编译
1、
1 |
|
2、
1 |
|
3、
1 |
|