预处理入门篇-程序执行过程:预处理-编译-汇编-链接做了什么操作?

前言

本篇博客是深入预处理的前导篇,主要是介绍 程序 的执行过程,主要使用 Linux 平台演示,具体为 CentOS7,以 C程序为例,通过对 程序执行过程的讲解,会穿插 预处理符的基本使用过程,以及 各个处理命令的基本使用。

程序运行过程

程序的翻译运行过程:本质上就是把文本式的代码翻译成二进制代码的过程。

因为计算机在执行时,只认识二进制,所以编写的 高级语言代码,需要 编译器 将其 编译 成 二进制代码,这个过程分为以下四个阶段:

下面使用 test.c 进行演示处理过程

#include <stdio.h>
#define N 10
int main()
{
    printf("\n hello world\n");
    printf("test1\n");
    printf("test2\n");
    printf("N=%d\n",N);
    return 0;
}
  • 预处理
    将代码进行预先处理,包含四个最主要操作,在Linux下编译就可以看到效果:gcc -E test.c -o test.i
    image
    • 头文件展开
    • 去注释
    • 宏替换
    • 条件编译
  • 编译
    将预处理后的C语言编译成汇编语言,也使用可以根据 .c 文件(自动先预处理,然后编译) 或是 .i 文件进行编译处理,生成 .s 文件,命令:gcc -S test.i -o test.s
    image
  • 汇编
    处理汇编文件,将上面得到的 汇编文件 进行 汇编处理,生成 可重定向的二进制文件,即 .o 文件并不是可执行文件,而是 可链接文件(无法直接执行),gcc -c test.s -o test.o
    imageLinux od命令用于输出文件内容。od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来。
  • 链接
    链接主要的库文件,将自身程序和库文件进行关联(关联分为静态链接和动态链接),因为在代码编写时调用了很多 标准库函数,使用库文件可以很好的提高效率,而且代码 健壮性 也更好。直接使用 gcc test.o -o test就可以生成一个名为 test的可执行文件了,如果不适用 -o test 来指定名字,就默认生成 a.out 可执行文件
    image
    可以使用 ldd test 来查看该可执行程序 依赖的库
    image

所以一般在使用的时候,gcc test.c就会直接上面四步,生成默认可执行文件 a.out,如果直接使用 gcc test.c -o test 就生成一个名为 test 的可执行文件。

上面的四个步骤的记忆重点是使用的参数,要记忆就记得 ESc 就可以了

最后

感谢观赏,一起提高,慢慢变强

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值