您的位置:首页 > 编程语言 > C语言/C++

c++学习之--关于程序编译

2013-11-17 15:06 225 查看
程序的编译流程:

编辑

预处理和编译

链接

关于编辑就不多说了,编辑就是将源文件输入计算机保存并修改。

预处理和编译,在编译之前会进行编译预处理

编译预处理包括:文件包含,宏,条件编译。关于编译预处理就是进行文件包含,宏展开,确定条件编译。然后是编译,编译是以一个个独立的文件作为单元,一个经过编译预处理的文件就会编译出一个目标文件(一个经过编译预处理的cpp文件就会编译出一个obj文件,在unix下是.o)编译器是根据后缀名来确定是否编译此文件。编译是以一个个单独的文件为单元的,这一点很重要,即编译只是负责本单元的事情,对于外部的事情一概不理会,在这一步里我们可以调用一个函数只需要在调用前得到函数的声明,而不必给出这个函数的定义,至于这个函数到底是怎么实现的,需要在链接这一步去找到函数的入口地址。因此提供声明的时候可以利用include文件包含,也可以在调用之前声明。编译阶段之后的事情就是分析语法的正确性之类的工作。

关于链接一直不是很清楚,写一下自己关于链接的理解。在经过编译之后会有多个obj文件(一般都不是单文件程序),简单的说就是将多个obj文件(这里也包括lib文件)和一些其他的资源组合在一起生成一个可执行的exe文件。链接的时候会检查全局空间里面是不是有重复定义或者缺失定义。这也就解释了为什么我们一般不会再头文件(h文件)中出现定义,因为头文件可能被释放到多个源文件中(cpp文件),在cpp文件编译完成,链接的时候就会发现全局空间会有多个定义。编译的时候会给出所有函数的虚拟地址,链接的时候会将这些虚拟地址转化为实地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐