预处理阶段
预处理阶段——检查基本语义,语法作用
FILE //进行编译的源文件
LINE //文件当前的行号
DATE //文件被编译的日期
TIME //文件被编译的时间
STDC //如果编译器遵循ANSI C,其值为1,否则未定义
预处理:头文件的展开/宏替换/条件编译/去掉注释 .i
预定义符号-define
后面不加 ; 容易引发错误
#define name stuff
define定义宏 记得加括号保证优先级
宏和函数的对比
. 用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。
2. 更为重要的是函数的参数必须声明为特定的类型。
所以函数只能在类型合适的表达式上使用。反之这个宏怎可以适用于整形、长整型、浮点型等可以
用于>来比较的类型。
宏是类型无关的。
宏的缺点:当然和函数相比宏也有劣势的地方:
- 每次使用宏的时候,一份宏定义的代码将插入到程序中。除非宏比较短,否则可能大幅度增加程序
的长度。 - 宏是没法调试的
- 宏由于类型无关,也就不够严谨。
- 宏可能会带来运算符优先级的问题,导致程容易出现错。
编译阶段
编译:检查语法,生成汇编代码 .s
汇编阶段
汇编:汇编代码转换二进制机器码 .o
头文件包含
库文件包含<>直接查找库一次
自己的头文件" "查找一次 但是如果用库函数使用这个导入就会查找库两次
链接
链接:合成生成可执行文件