面试题:描述一下C程序的编译过程

一、从.cpp文件到可执行文件要经历四个步骤,如下图:
**这里写图片描述**

二、以一个实例来说明编译过程,假设现在下面有一个hello.c文件

1、预处理
     gcc -E helo.c -o helo.i

    预编译过程主要处理那些源代码中以#开始的预编译指令,主要处理规则如下:

    (1) 将所有的#define删除,并且展开所有的宏定义;
    (2)处理所有条件编译指令,如#if,#ifdef等;
    (3) 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。
    (4) 删除所有的注释//和 /**/;
    (5)添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;
    (6) 保留所有的#pragma编译器指令,因为编译器须要使用它们;

2、编译:生成汇编代码
    gcc -s helo.i -o helo.s

3、汇编:汇编器是将汇编代码转变成机器可以执行的命令。
     gcc –c hello.c –o hello.o

4、链接:生成可执行文件
    gcc -o hello hello.o

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmfrm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值