编译+链接
翻译环境
组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。
每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。
链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中
然而编译本身也分为几个阶段
编译本身可分为预编译、编译、汇编最后用链接器捆绑
预编译又叫预处理,在此阶段会进行注释的替换、头文件的包含以及#define符号的处理;
编译环节是将源代码汇编成汇编语言,进行下一个阶段;此阶段进行词法和语法分析以及符号的汇总并且汇总的符号都是全局的;
汇编将汇编代码翻译成二进制的指令生成了.o文件
链接器进行段表的合并以及符号表的重定位和合并
运行环境
预处理详解
__FILE__ | //进行编译的源文件 //文件当前的行号 //文件被编译的日期 //文件被编译的时间 //如果编译器遵循ANSI C,其值为1,否则未定 |
#define
#define 定义标识符
注 :使用#define 在最后不要加;有时会出现问题
#define 定义宏
#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义
宏(define macro)
在使用宏定义的参数时 我们要习惯把每个参数加上括号这样在宏替换后就不会出错了
#
##
带副作用的宏参数
命令行定义
条件编译
#include
为了防止头文件的重复调用,可以使用条件编译