用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改变函数或变量的链接属性,使得只能在本文件下使用。

C语言程序的翻译过程相关推荐

  1. gcc编译c文件_Linux下C语言程序的编译过程

    Linux下C语言程序的编译过程 使用gcc编译程序时,编译工程分为4个阶段: (1)预处理:(Pre-Processing) (2)编译:(Compiling) (3)汇编:(Assembling) ...

  2. C语言程序makefile编译过程

    C语言程序makefile编译过程 2022-0111 blog_010 makefile是一些大型linux下开发的项目经常会用到的编译脚本: 可以将makefile理解为类似shell一样的脚本语 ...

  3. C语言 程序的翻译 预处理 编译 汇编 链接 #define详解

    1.程序的翻译环境和执行环境 执行环境:所在操作系统的平台 win10 win11 linux 翻译环境:MSVC gcc g++ 你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你 ...

  4. 飞刀推球搜众神推球:c语言程序的编译过程

    **根据知名球料公中号"众神推球"表明:**经典的Hello World,通常是你的第一个c语言程序: #include<stdio.h> int main() { p ...

  5. c语言程序的执行过程

    编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. C源程序头 ...

  6. Linux下C语言程序的编译过程

    使用gcc编译程序时,编译工程分为4个阶段: (1)预处理:(Pre-Processing) (2)编译:(Compiling) (3)汇编:(Assembling) (4)链接:(linking) ...

  7. c语言程序的执行过程压栈,汉诺塔---手写出栈压栈过程实现

    代码实现: 1 #include 2 3 //函数的形参A.B.C不一定代表的是A.B.C柱子,递归传参的时候会变化! 4 void hanoit(int n,char A,char B,charC) ...

  8. 简单C语言程序的执行过程

    程式的運行方式 在開始進行程式開發前,我們先來探討最簡單的C程式如何運作. 為了使程式足夠簡單,我們可讓CPU直接從Flash上取得指令(fetch instruction)並執行,而且程式中沒用到全 ...

  9. c语言程序课程设计过程,C语言课程设计————写下流程图! 谢谢

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 printf("---You have success read data from file!!!---\n"); return h ...

最新文章

  1. np.logic_and/or/not用法
  2. [c++] vector<vector<int>>排序
  3. Lua_第17 章 数学库
  4. 【剑指offer】面试题6:从尾到头打印链表(Java)
  5. 传奇客户端wil和pak文件的目录与作用
  6. java json 乱码问题_java中json传输数据乱码问题
  7. set的用法及短语_set的用法总结大全
  8. 薪火相传 点亮企业数智化舞台—— CDEC2021中国数字智能生态大会西安收官
  9. 中康科技黄毅宁:AI+医疗,于我而言是圆梦
  10. 程序员的天堂还是地狱:论东南亚BC工厂
  11. 使用bert将中文文本转化成词向量的方法
  12. 1T和12T单片机的区别
  13. 时间戳和时间字符串互转
  14. SSL 1760——商店选址问题(Floyd最短路)
  15. 【解决方法】论文插入MathType数学公式导致行距变大
  16. ubuntu:如何找到当前系统版本下对应的软件包下载地址
  17. 你什么时候觉得如果自己不努力,背后会是万丈深渊?
  18. 双十二年终盛典,几何画板放价为您!
  19. 将大写字母转换为小写字母(将该字符串中的大写字母转换成小写字母,之后返回新的字符串。)
  20. 数值线性代数之列主元Gauss消去法(MATLAB)

热门文章

  1. Fireworks MX 2004 矢量工具-制作环绕文字(转)
  2. jQuery的属性与样式之增加样式、删除样式、切换样式
  3. FVD跟驰模型Python数值仿真
  4. 关于python多线程,线程锁,线程池开发接口测试脚本真实实例,用于测试时间节约
  5. 计算机专业开题报告论证记录如何写,开题论证记录
  6. 逻辑学学习.10 --- 谓词逻辑(二):一般命题的符号化
  7. android 设置新手引导
  8. 关于数字编码的小知识
  9. win10启动mcgs触摸屏
  10. HORMANN霍曼控制箱维修控制器维修BK150 FUE H