C++编译过程

C++程序从源代码到可执行程序大致要经历

  1. 预处理 .c -> .ii
  2. 编译 .ii -> .s
  3. 汇编 .s -> .o
  4. 链接 .o -> .exe

预编译处理(.c、.cpp) -> 编译、优化程序(.s)->汇编程序(.obj、.o、.a、.ko) -> 链接程序(.exe、.elf、.axf等)

#include<iostream>

using namespace std;

int main()
{
	cout << "Hello, world!" << endl;
		return 0;
}
  1. 预处理:

    预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理

    所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾

    几乎所有的C++源程序都有 #include 指令。这个宏用于把头文件包含到源文件中

  2. 编译
    通过预编译输出的.i文件中,只有常量:数字、字符串、变量的定义,以及c语言的关键字:main、if、else、for、while等。这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。

  3. 汇编
    汇编过程就是把汇编语言翻译成目标机器指令的过程,生成目标文件(.obj .o等)。目标文件中存放的也就是与源程序等效的目标的机器语言代码。

    目标文件由段组成,通常至少有两个段:

    代码段:包换主要程序的指令。该段是可读和可执行的,一般不可写

    数据段:存放程序用到的全局变量或静态数据。可读、可写、可执行

  4. 链接
    由汇编程序生成的目标文件并不能立即就执行,还要通过链接过程。

    原因:

    1. 某个源文件调用了另一个源文件中的函数或常量

    2. 在程序中调用了某个库文件中的函数

    链接程序的主要工作就是将有关的目标文件连接起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值