首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言编译过程

如果用一张图来表示: image.png 编译编译程序读取源程序(字符流),对之进行词法和语法分析,将高级语言指令转换为功能等效汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式要求链接生成可执行程序...如数字、字符串、变量定义,以及C语言关键字,如main,if,else,for,while,{,},+,-,*,\,等等。...经过优化得到汇编代码必须经过汇编程序汇编转换成相应机器指令,方可能被机器执行。 4.汇编过程 汇编过程实际上指把汇编语言代码翻译成目标机器指令过程。...对于被翻译系统处理每一个C语言源程序,都将最终经过这一处理而得到相应目标文件。目标文件中所存放也就是与源程序等效目标的机器语言代码。 目标文件由段组成。...经过上述五个过程,C源程序就最终被转换成可执行文件了。缺省情况下这个可执行文件名字被命名为a.out。 老九学堂出品

1.9K20

C语言编译过程

处理条件预编译 #if, #ifdef, #if, #elif,#endif 处理“#include”预编译指令,将包含“.h”文件插入对应位置。这可是递归进行,文件内可能包含其他“.h”文件。...用于显示调试信息:错误或警告位置。 保留#pragma编译器指令。(1)设定编译器状态,(2)指示编译器完成一些特定动作。...代表接下来文本应该被当做包含一个隐式extern "C 块 编译 1.高级语言->汇编代码 命令 gcc -S a.i -o a.s .file "a.c" .globl _...链接 使用到了C标准库东西“printf”,但是编译过程只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,将翻译成二进制与需要用到库绑定在一块。...动态库与之相反,在编译链接时并没有把库文件代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统开销。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C语言笔记】C语言编译过程

    1、前言 如果你使用是集成开发环境,那么你点击编译按钮就可生成可执行文件,然后点击运行即可运行。那么,你知道从源代码到可执行文件经历了哪些过程吗。仅仅是编译?...\n"); return 0; } 其经历如下过程: ? 如图,编译生成可执行文件过程实际包含四个过程:(1)预处理;(2)编译;(3)汇编;(4)链接。...预处理命令为: gcc -E test.c -o test.i 上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-o是指定输出文件名。 预处理之后得到仍然是文本文件。...编译命令为: gcc -S test.i -o test.s 上述命令中-S让编译器在编译之后停止,不进行后续过程;-o是指定输出文件名。汇编文件test.s是文本文件,部分内容截图如下: ?...链接过程命令为: gcc test.o -o test.exe 综上,生成可执行程序过程为:预处理、编译、汇编、链接。各个命令如下图所示: ?

    12.2K31

    Go 语言编译过程概述

    语言实现原理,理解它编译过程就是一个没有办法绕过事情。...这一节会先对 Go 语言编译过程进行概述,从顶层介绍编译器执行几个步骤,随后章节会分别剖析各个步骤完成工作和实现原理,同时也会对一些需要预先掌握知识进行介绍和准备,确保后面的章节能够被更好理解...目录 编译原理概述 词法和语法分析器 类型检查 中间代码生成 机器码生成 预备知识 想要深入了解 Go 语言编译过程,需要提前了解一下编译过程中涉及一些术语和专业知识。...总结 Go 语言编译过程其实是非常有趣并且值得学习,通过对 Go 语言四个编译阶段分析和对编译器主函数梳理,我们能够对 Golang 实现有一些基本理解,掌握编译过程之后,Go 语言对于我们来讲也不再是一个黑盒...,所以学习其编译原理过程还是非常让人着迷

    1.4K40

    解密C语言编译背后过程

    我们大部分程序员可能都是从C语言学起,写过几万行、几十万行、甚至上百万行代码,但是大家是否都清楚C语言编译完整过程呢,如果不清楚的话,我今天就带着大家一起来做个解密吧。...C语言相对于汇编语言是一种高级语言,要想在系统上运行,需要通过编译器把它转换成机器能够读懂可执行代码。...$gcc -save-temps hello.c –o hello $ls hello hello.c hello.i hello.o hello.s C编译编译过程主要分成四步: (1) 预处理...2)编译 Compiling 编译将 hello.i 文件编译生成一个中间文件 hello.s,打开可以看到里边都是汇编语言,所以编译作用就是把源代码转换成汇编语言。 ?...到这里 C完整编译流程就结束了,本文示例用是Linux操作系统,编译器用是 gcc,但在其他操作系统,比如 Unix、Windows,或者用其他编译器,原理都是一样,感兴趣同学可以去学习一下编译原理

    85530

    Go语言编译链接过程

    2:编译过程 我们知道Go 程序并不能直接运行,每条 Go 语句必须转化为一系列低级机器语言指令,将这些指令打包到一起,并以二进制磁盘文件形式存储起来,也就是可执行目标文件。...Go语言编译器同时使用静态类型检查和动态类型检查,这里只讨论静态类型检查。...中间代码是编译器或者虚拟机使用语言,它可以来帮助我们分析计算机程序。在编译过程中,编译器会在将源代码转换到机器码过程中,先把源代码转换成一种中间表示形式。 ​...Go 语言运行时函数 2.4.2 遍历和替换 在生成中间代码之前,编译器还需要替换抽象语法树中节点一些元素,这个替换过程是通过cmd/compile/internal/gc.wal和以相关函数实现...编译过程其实是对单个文件进行,而链接过程编译过程生成一个个目标文件链接成最终可执行程序,最终得到文件是分成各种段,比如数据段、代码段、BSS段等等,运行时会被装载到内存中。

    1.1K60

    C语言编译过程剖析

    一、 摘要 C语言编译整个过程是非常复杂,里面涉及到编译器知识、硬件知识、工具链知识都是非常多,深入了解整个编译过程对工程师理解应用程序编写是有很大帮助,希望大家可以多了解一些,在遇到问题时多思考...二、 C语言编译过程 1) 编译概念: 编译程序读取源程序(字符流),对之进行词法和语法分析,将高级语言指令转换为功能等效汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式要求链接生成可执行程序...编译、优化阶段 经过预编译得到输出文件中,只有常量;如数字、字符串、变量定义,及C语言关键字,如main,if,else,for,while,{,}, +,-,*,/等等。...经过优化得到汇编代码必须经过汇编程序汇编转换成相应机器指令,方可能被机器执行。 3. 汇编过程 汇编过程实际上指把汇编语言代码翻译成目标机器指令过程。...三、 总结 C语言编译整个过程是非常复杂,里面涉及到编译器知识、硬件知识、工具链知识都是非常多,深入了解整个编译过程对工程师理解应用程序编写是有很大帮助,希望大家可以多了解一些,在遇到问题时多思考

    1.1K30

    用gcc编译c语言程序以及其编译过程

    对于初学c语言编程我们来说,学会如何使用gcc编译器工具,对理解c语言执行过程,加深对c语言理解很重要!!!...(注意:编译名字可以随意起,但是呢我们知道预编译文件还是文本.c文件,所以为了好区分起名字为 xxx.c,这里我们为了显示整个过程,预编译文件名我们起为xxx.i。)...在c语言中#开头语句又叫预编译指令。例如:#include 预编译功能之一:会把include包含头文件内容做一个简单替换,即替换到.c文件里面去。 .........,即把文本c语言编译为二进制指令。...(注意;用c语言代码依赖库最少,如果使用其他语言依赖库更多哦!!需要装好多包包。)

    1.6K10

    高级语言编译:链接及装载过程介绍

    也有很多不同编程语言,各自有自己编译器把相应源代码编译成二进制可执行程序。尽管有些实现细节不同,这些编译工作原理和过程是一致。...从这三个“理所当然”行为里面,我们可以推断出编译器至少需要做哪些事情。第一,CPU 肯定不能理解这些高级语言代码,编译器需要把代码编译成二进制指令。...至此,我们讨论了从一个 C 语言程序源代码,到运行中进程过程。...另外虽然我们使用 C 语言进行说明,在同一种系统中,其他语言编译得到二进制文件是一样格式。...由此我们可以得知,虽然go编译器和gcc编译器细节实现上有所不同,但所做工作基本是一样。 显然这样一篇短文不可能很详尽编译,链接和装载这么复杂过程描述很细致。

    1.4K80

    java编译过程_Java编译运行过程

    大家好,又见面了,我是你们朋友全栈君。 Java编译运行过程 在上一篇文章中,我们了解了第一个Java入门程序,以及如何编译和运行第一个Java程序。...本文主要了解以下编译和运行Java程序时会发生什么。此外,我们还会分析一些常见问题。...1 Java程序编译过程编译时,Java文件由Java编译器(它不与底层操作系统交互)将Java代码转换为字节码(.class)。...2 Java程序运行过程 在Java程序运行中,会执行以下步骤: 类加载器(Classloader):类加载器是JVM子系统,用于加载类文件。...3 两个常见问题 3.1 Java源文件命名方式 问题:一个class名称为Simple,Java源文件名称可以不是Simple.java么?

    2.1K10

    编译过程

    编译系统运行过程 源代码 --> 机器代码 解释器运行程序方法 1.直接运行高级编程语言 2.转换高级编程语言码到一些有效率字节码(Bytecode),并运行这些字节码 ---- Python...解释语言特点 "拆解"代码: 首先当用户键入代码交给Python处理时候会先进行此法分析,例如用户键入关键字或者当输入关键字有误时,都会被此法分析所触发,不正确代码将不会被执行 下一步Python...:"中,test后面的冒号如果写成其他符号,代码依旧不会被执行 在执行Python前,Python会生成.pyc文件,这个文件就是字节码[1] 如果不小心修改了字节码,Python下次重新编译该程序时会和其上次生成字节码文件进行比较...,如果不匹配则将会被修改过字节码文件进行覆盖,以确保每次编译后字节码准确性。...简单来说就是在编译代码过程中,首先会将代码中函数、类等对象分类处理,然后生成字节码文件。有了字节码文件,CPU可以直接识别字节码文件进行处理,接着Python就可执行了。 ↩︎

    51040

    gcc编译过程

    预处理主要包括以下过程: 将所有的 #define 删除,并且展开所有的宏定义 处理所有的条件预编译指令,比如 #if #ifdef #elif #else #endif 等 处理 #include 预编译指令...gcc -S hello.i -o hello.s 不同编译器交叉编译同一个 hello.i 文件生成汇编文件也不相同,这也是 C 语言可移植性一种体现。...六、汇编 汇编过程实际上指把汇编语言代码翻译成目标机器指令过程。对于被翻译系统处理每一个 C 语言源程序,都将最终经过这一处理而得到相应目标文件。...目标文件中所存放也就是与源程序等效目标的机器语言代码。 目标文件由段组成。通常一个目标文件中至少有两个段: 代码段(文本段):该段中所包含主要是程序指令。...2、动态链接 动态链接优点: (1)可执行文件很小; (2)适合大规模软件开发,开发过程耦合度小、独立,便于不同开发人员和开发组织开发; (3)不同编程语言按照约定可以使用同一套.dll库;

    26310

    Java代码编译过程

    知识手册里写 仿佛我从来没学过一样 有点沉不下心来看 整理一下 笔记 从Javac代码总体结构来看,编译过程大致可以分为1个准备过程和3个处理过程,它们分别如下所示。 1....插入式注解处理器注解处理过程: 在Javac源码中,插入式注解处理器初始化过程是在 ** initPorcessAnnotations() ** 方法中完成,而它执行过程则是在processAnnotations...这个方法会判断是否还有新注解处理器需要执行,如果有的话,通过JavacProcessing-Environment类 doProcessing() 方法来生成一个新JavaCompiler对象,对编译后续步骤进行处理...分析与字节码生成过程,包括: 标注检查,对语法静态信息进行检查。 数据流及控制流分析,对程序动态运行过程进行检查。 解语法糖,将简化代码编写语法糖还原为原有的形式。...上述3个处理过程里,执行插入式注解时又可能会产生新符号,如果有新符号产生,就必须转回到之前解析、填充符号表过程中重新处理这些新符号,从总体来看,三者之间关系与交互顺序如图所示。 ?

    93720

    Cpp程序编译过程

    前言 首先gcc与GCC要区分对待,GCC原名为GNU C Compiler,是一个C编译代号,但是后来不断地扩展,开始支持很多语言,GCC也就变成了编译器家族GNU Compiler Collection...编译四个阶段 如果只是在命令行编译一下c或c++程序,直接看后面的命令就可以了,但是了解一下编译过程,会加深对gcc理解..../test #然后就可以运行文件了 gcc & g++ 这两个都是编译名字,一般看名字会感觉gcc用来编译c语言,g++用来编译c++,但实际上这两个既能编译c语言,又能编译c++,g++可以算是...当g++编译c程序时,跟gcc用法是一样,实际上g++在编译c程序是也是直接调用gcc 当g++编译cpp程序时,看下面一节....参考 C语言中文网 GCC编译c语言程序完整演示 c语言真正编译过程 Linux查看二进制文件内容 GCC 欢迎与我分享你看法。 转载请注明出处:http://taowusheng.cn/

    1K10

    C编译过程

    编译包括宏展开、头文件包含、条件编译等。...也可以使用gcc -E -o test.i main.c -P,得到简化编译文件,去掉了#注释。 编译 将预处理之后C代码,编译成汇编代码,由高级语言代码翻译成低级语言代码。...将预编译源代码.i文件,编译后输出为汇编文件,后缀名一般用.s,输出仍然是文本文件。...每一个.c文件编译到.obj文件,都需要经过预编译编译、汇编三步。 输入汇编.s文件,输出指定平台obj文件,后缀名一般用.o表示。这一步结果是非文本文件。...链接 通过链接器,将上一步生成二进制目标文件、启动文件、依赖库文件,一并链接成一个可执行文件。 这一步输出是对应平台可执行文件,如Linux下elf文件。

    13810

    javac 编译过程

    javac 编译过程 ? 一、解析与填充符号表: 1. 语法、词法分析: a) 语法分析:将源代码字符流转换为标记(Token:编译过程最小元素)集合。...b) 词法分析:根据标记序列构造抽象语法树(AST:用来描述程序代码语法结构树形表示方式,每一个节点代表程序中一个语法结构。 2. 填充符号表: 一组符号地址和符号信息组成表格。...二、注解处理器:    插入式注解处理器,编译期间处理注解,读取,修改,删除语法树中任意元素,编译器会根据修改与否,重新回到解析及符号表填充阶段进行处理。   ...标注检查: 包括变量使用前是否已声明,变量与赋值之间数据类型是否匹配 +++ 常量折叠:int a = 1 + 2 ==> int a = 3 2....数据集控制流分析: 包括,局部变量是否赋值,方法路径返回值验证,受检异常正确处理。 3. 解语法糖: 泛型,装箱拆箱,for循环,条件编译等 4. 字节码生成: 转换字节写磁盘。

    1.2K20

    iOS 编译过程

    iOS 编译采用 Clang 作为编译器前端,LLVM 作为编译器后端,编译器前端负责语法分析,语义分析,生成生成中间码 (LLVM IR),在这个过程中,会进行类型检查,如果发现错误或者警告会标注出来在哪一行...;编译器后端会进行机器无关代码优化,生成机器语言,并且进行机器相关代码优化。...当一个 xcode 工程 build 之后一般会执行如下几个步骤: Clang 编译过程 预处理 预处理器会处理源文件中宏定义,将代码中宏用其对应定义具体内容进行替换,删除注释,展开头文件,产生...LLVM 编译过程 目标代码生成与优化 CodeGen 负责将语法树 AST 丛顶至下遍历,翻译成 LLVM IR 中间码,LLVM IR 中间码编译过程前端输出后端输入。...优化中间代码生成输出汇编代码,把之前 .i 文件转换为汇编语言,产生 .s 文件 汇编 目标代码需要经过汇编器处理,把汇编语言文件转换为机器码文件,产生 .o 文件。

    1.5K20
    领券