语言转汇编头文件_C/C++语言编译链接过程

本文详细介绍了C语言程序从源代码到可执行文件的编译过程,包括预处理、编译、汇编和链接四个阶段。通过一个实例展示了如何使用gcc命令逐级进行这些操作,并解释了每个阶段的作用和结果,如预处理替换头文件和宏,编译生成汇编代码,汇编转换为机器码,以及链接阶段的符号解析和重定位。
摘要由CSDN通过智能技术生成

90a2ea8e7d6266033011913c00ebe332.png

前言

C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。
编写hello world C程序:

// hello.c
#include <stdio.h>
int main(){
    
    printf("hello world!n");
}

编译过程只需:

$ gcc hello.c # 编译
$ ./a.out # 执行
hello world!

这个过程如此熟悉,以至于大家觉得编译事件很简单的事。事实真的如此吗?我们来细看一下C语言的编译过程到底是怎样的。
上述gcc命令其实依次执行了四步操作:

  1. 预处理(Preprocessing)
  2. 编译(Compilation)
  3. 汇编(Assemble)
  4. 链接(Linking)

bea15dbbff8d292e41e3fc0b0b579705.png

示例

为了下面步骤讲解的方便,我们需要一个稍微复杂一点的例子。假设我们自己定义了一个头文件mymath.h,实现一些自己的数学函数,并把具体实现放在mymath.c当中。然后写一个test.c程序使用这些函数。程序目录结构如下:

├── test.c 
└── inc     
      ├── mymath.h     
      └── mymath.c

程序代码如下:

// test.c
#include <stdio.h>
#include "mymath.h"// 自定义头文件
int main(){
    
    int a = 2;
    int b = 3;
    int sum = add(a, b); 
    printf("a=%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值