C语言程序的翻译过程

  用C语言直接写出来的源码是不能被计算机识别的,这中间必须经过一系列的过程,使得源码成为计算机所能识别的语言,我们把这个过程称作程序的翻译。源码翻译的过程有四步:

1.预处理

  在这之前我们先来说说C语言的库函数,为了更大给予程序员方便,避免一些不必要的麻烦,C语言提供了许多简洁而又强大的函数,这些函数放在库里。在程序开头我们引用了一个<stdio.h>的头文件,所以函数翻译过程所要做的第一步就是头文件展开,把stdio.h里的文件全部展开,这个过程虽然我们看不到但是确真实存在,在这个过程中,编译器还会进行宏替换,把我们注释掉的内容完全抹去。我们可以在linux下观察到各个过程。

  首先我们先编辑一个test.c文件


这时我们输入gcc test.c -E -o test.i,此处的-E表示让程序在做完预处理阶段后停下,并且生成test.i的文件,此时我们进去test.i可以看到如下



2.编译

  在编译阶段,程序会进行语法分析,词法分析,语义分析,符号汇总的工作,输入gcc test.c -S -o test.s,-E表示让程序做完编译停下


3.汇编

  汇编阶段会形成符号表,并把汇编指令转化为二进制指令,输入gcc test.c -c -o test.o,


  此时程序已经变成一堆我们不认识的符号,但是计算机可以读取。

4.链接

  这是程序执行的最后一步,简单来说,就是在一个源文件下可以有多个.c文件,各个文件之间也可以有互相引用的函数及变量,链接就是去把其他.c文件里的变量或函数引进来,这是属于动态链接。还有一种静态链接,即用static修饰的函数或变量,关键字static改变函数或变量的链接属性,使得只能在本文件下使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值