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

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

下面以windows环境下的test.c为例,test.c里的代码为: #include int main(void) { printf("This is a test program...\n"); return 0; } 其经历如下过程: ? 如图,编译生成可执行文件的过程实际包含四个过程:(1)预处理;(2)编译;(3)汇编;(4)链接。...预处理的命令为: gcc -E test.c -o test.i 上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-o是指定输出文件名。 预处理之后得到的仍然是文本文件。...汇编过程的命令为: gcc -c test.s -o test.o 上述命令中-c、-o让汇编器把汇编文件test.s转换成目标文件test.o。...链接过程的命令为: gcc test.o -o test.exe 综上,生成可执行程序过程为:预处理、编译、汇编、链接。各个命令如下图所示: ?

12.2K31

C语言编译过程

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

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

    【C语言】C语言 4 个编译过程详解

    C语言的编译过程涉及几个关键步骤、概念和细节,每个步骤都有助于将人类可读的源代码转换为可执行的机器码。以下是详细的解释和示例:一、什么是编译?编译是将源代码转换为目标代码的过程。...它是在编译器的帮助下完成的。编译器检查源代码是否存在语法或结构错误,如果源代码没有错误,则生成目标代码。c 编译过程将作为输入的源代码转换为目标代码或机器代码。...hex 和 .bin 文件通常不是C语言编译过程的直接产物,而是在嵌入式系统开发中常见的文件格式,用于存储程序或数据的二进制表示。...这些文件通常是在程序已经编译、链接并生成了可执行文件之后,通过特定的工具或者转换过程生成的。因此,它们不属于C语言编译过程的标准阶段,但是在嵌入式开发中是非常常见的文件格式。....编译:将C源代码转换为汇编语言。汇编:将汇编指令转换为机器码。链接:将机器码与标准库函数(如 printf)结合,生成最终的可执行文件。

    81410

    解密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,或者用其他编译器,原理都是一样的,感兴趣的同学可以去学习一下编译原理

    85630

    【C语言】 扫雷游戏(保姆级的实现过程)

    ,演出并非我们所选择的剧本 ---- 目录 write in front    Ⅰ 前言 Ⅱ 模块化编程   Ⅲ 游戏思路与逻辑 Ⅳ 实现游戏步骤/过程  ① 创建颜色函数  创建颜色函数color(...模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。...传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。...模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。...---- Ⅳ 实现游戏步骤/过程  ---- ① 创建颜色函数  创建颜色函数color()  前景色颜色的对应值↓ 0=黑色                8=灰色   1=蓝色

    1.2K40

    C语言编译全过程剖析

    一、 摘要 C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考...二、 C语言编译全过程 1) 编译的概念: 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序...经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。 3. 汇编过程 汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。...对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。...三、 总结 C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考

    1.1K30

    【C语言】汇编角度剖析函数调用的整个过程

    提示:本文意在使用汇编的语言给大家介绍函数调用中栈区上的过程变化,加深我们对于代码底层的理解,由于不同的编译器使用下,可能造成一些差异,但这并不影响我们对于知识原理的掌握,所以本文不必过多纠结细节处的变化...call指令是调用子程序,后面紧跟的应该是子程序名或者过程名。...ret 二、函数栈帧的创建与销毁过程(从汇编角度去看) 1.从下面的原码中我们也可以看出,其实我们的main函数也是被其他函数调用的。...invoke_main() { return main(__argc, __argv, _get_initial_narrow_environment()); } 2.下面的代码分别是C语言代码和汇编语言代码...我们会通过汇编语言中的call指令,先将其下一条指令的IP压栈到我们的栈帧空间当中,并且指向call指令,会进入到被调用函数的汇编代码当中,进行被调用函数的汇编指令 并且我们函数调用结束后,通过ret指令能够回到上一层函数中

    1.5K10

    快速适配 Flutter 之语言国际化

    Flutter本身是具备国际化的,在适配方面也较为简单,今天我将会介绍一个名为Flutter Intl的插件快速实现Flutter的语言国际化。...Flutter Intl 之前在学习适配国际化的时候,出现最多的一个组件叫做flutter_i18n[1],不过由于一些原因,这个插件已经停止维护了,后来无意中发现了一个名为Flutter Intl[2...有关这些应用程序属性的更多信息,它们所依赖的类型以及如何国际化Flutter应用程序,可以查阅官方文档?...《Flutter 应用里的国际化》[3] 使用 上文提到了,配置好该插件后,我们需要做的便是在arb文件中编辑相应的字段即可,这里给出示例。 如果有其他语言,只需要再添加一份arb文件即可。...然后我们将选择好的语言用SharedPreference保存,每次启动App时检查用户设置的语言即可。

    2.4K20

    前端国际化:语言包篇

    开篇之前,读者需要区分好国际化(i18n - internationalization)和本地化(l10n - localization) , 它们是相互关联但又不同的概念: 国际化(i18n):这是一个设计和开发过程...简单来说,国际化是创建一个可以轻易本地化的产品的过程,而本地化是将产品调整以适应特定地区的过程。两者在实际产品中的边界可能比没有那么清晰,而是相辅相成,通常在大的国际化基座上进一步进行本地化。...国际化的涉及面非常广,比如语言、文字编码、时区、书写习惯、单复数、标点符号、时间格式、货币格式、计量单位… 强烈推荐读者读一下 基础设计专栏 - From.RED 这个专栏,这里面一系列的国际化/本地化的文章都非常赞...: 为全球设计,国际化与本地化探索:快速入门 为全球设计,国际化与本地化探索:国际化设计 为全球设计,国际化与本地化探索:本地化设计 实际上笔者也不是特别专业,这系列文章仅是我的一些技术实践总结。...相关的源码可以看这里 3. 语言包管理 3.1 如何管理和分析语言包的使用? 那么如何提高前端国际化的开发体验呢?

    1.8K30

    【C语言】初识C语言(常见的C语言概念)

    语言大致可以分为自然语言和计算机语言,自然语言就是人与人日常交流的语言,如汉语、英语、日语等等,计算机语言又可以分为机器语言、汇编语言、高级语言,C语言就是一个高级语言 机器语言:就是由二进制01组合起来的计算机可以直接识别的程序语言是一种面向机器的语言...,比起低级语言易懂易学,可移植性好,编程效率高,但是执行效率没有低级语言高,需要经过编译或解释,C语言就是采用编译的一种高级语言 二.为什么选择C语言 C语言常年霸榜各类高级语言前三,属于基础必学的语言...,其功能强大,而且许多语言都很相似,如果学好C语言,对学习其他语言也有很大帮助 三.编译器的选择 C语言是一门编译型的语言,需要依赖编译器将计算机语言转换成机器能够执行的机器指令 常见的编译器有:msvc...将后缀名.cpp改为.c就可以了,创建好后就可以开始写我们的第一个C语言程序了 注意:其中.c的文件叫源文件,.h的文件叫头文件(head),后面会慢慢讲到 五.第一个C语言程序 注:只需要跟着操作,后面会一一解释它们代表着什么...,按ctrl+k,ctrl+u可以取消注释 总结 以上就是今天所要讲的C语言常见的概念,下次讲C语言的数据类型和变量,如果今天的内容有不懂的还请在评论区留言,当然,还有许多不足的地方也请大家多多指正,谢谢

    13310

    【C语言总集篇】指针篇——从不会到会的过程

    下面我们就来一起探讨一下; 12.1 变量 12.1.1 变量的分类 对于C语言来说,变量可分为全局变量和局部变量,下面我们来看一下什么是局部变量,什么是全局变量: //变量的分类 int a = 10...函数内部的局部变量; 在C语言中,我们将花括号{}称为代码块,因为我们所有的代码都是需要再{}内部编写的。...这种通过地址来修改变量的值的方式是绕过了C语言的语法规则,打破了const的规则限制,这显然是不合理的,那我们应该怎么做才能保证即使拿到了变量的地址也无法对变量进行修改呢?...,数组指针是一个一级指针,而指针数组相当于一个二级指针; 十六、函数指针变量 C语言学习到现在,不知道大家有没有发现一个有趣的事情,那就是C语言的命名特别的简单粗暴: 对不同类型的数组命名是字符数组、整型数组...,这样就提高了代码的编写效率; 结语 【C语言总集篇5】指针篇的内容咱们就全部介绍完了,这篇内容对指针与数组进行了深入的剖析,我们通过类比的方式介绍了不同类型的指针与其对应的数组。

    37010

    【C语言总集篇】数组篇——从不会到会的过程

    这里的类型指的就是元素的数据类型。所以我们需要有一个概念就是—— 只有相同类型的元素才能组成一个集合。 在计算机语言中,我们把这种集合称为数组。...下面我们需要介绍一个C语言的操作符——sizeof; sizeof是用来计算操作数所占内存空间大小的操作符,单位是字节。这里的操作数可以是变量、数据类型也可以是数组。...C语言本身是不做数组下标的越界检查,编译器也不一定报错;但是编译器不报错,并不意味着程序是正确的,所以程序员写代码时最好自己做越界的检查。...结语 这一篇内容是对C语言数组内容的一个总集篇,里面涉及的内容也是比较全面的,希望对各位刚刚学习C语言的朋友,和想要回顾C语言相关知识点的朋友提供一点帮助。...各位如果在学习的过程中遇到了什么问题,都可以在评论区留言或者私信我,我在看到消息后也会第一时间回复的。 接下来我也会陆续的将操作符、指针、结构体等内容编写好后发出来,各位朋友记得关注哦!!!

    37210

    【C语言总集篇】函数篇——从不会到会的过程

    二、C语言中函数的分类 在C语言中函数分为两种:库函数、自定义函数。那什么是库函数,什么是自定义函数呢?咱们现在就来揭晓。 库函数 1.什么是库函数 库函数简单的理解就是C语言数据库里面的函数。...,这样就大大增加了工作量; 所以,方便程序员更加高效的编写代码,C语言就将这些函数给汇总并添加进了数据库中,这也就是所谓的库函数。...换一种角度来看,库函数其实也是自定义函数,只不过这个自定义是C语言库的自定义。 3.怎么学习库函数呢?...C语言库中。...今天的内容到这里就全部结束了,接下来我会继续给大家分享C语言学习的相关知识点,咱们下一篇再见。

    29911

    iOS 语言本地化与国际化

    (一)应用名称本地化/国际化 应用名称本地化,是指同一个App的名称,在不同的语言环境下(也就是手机设备的语言设置)显示不同的名称。...之前,一定要保证我们已经添加了需要本地化的语言,也就是上面配置需要国际化的语言那一步(步骤:project->Info->Localizations,然后点击"+",添加需要国际化/本地化的语言)。...点击Localize后,会弹出一个对话框,展开对话框列表,发现下拉列表所展示的语言正是我们在上面配置的需要国际化的语言,选择我们需要本地化的语言,然后点击对话框的Localize按钮,如下图: ?...注意:如果我们没有在 PROJECT 中配置需要国际化的语言(project->Info->Localizations,然后点击"+"),上图下拉列表中将只会出现"Base"和"English"选项,English...语言是系统默认的语言,其他需要国际化的语言(例如中文简体、法语)必须通过上面的配置本地化语言那一步手动添加。

    1.1K20

    更好用的excel国际化多语言导出

    不知道大家在开发中有没有遇到过『excel导出』的需求,反正我最近写了不少这种功能,刚开始利用poi,一行行的手动塞数据,生成excel,而且还有国际化需求,比如:标题栏有一列,用户切换成"简体中文"时...exportObjects2Excel(list, Student2.class, true, "学生信息", true, BASE_PATH + "student2.xlsx"); 不过原作者并没有提供国际化多语言的功能...,于是顺着这个思路,略为修改了一下,再定义一个多语言的注解: /** * 国际化标题注解 * * @author 菩提树下的杨过 */ @Retention(RetentionPolicy.RUNTIME...|student"]) * * @return 国际化标题配置数组 */ String[] titles(); } 导出的地方去判断有无这个注解就行(详细大家可以看源码..."姓名", order = 2) @I18nField(titles = {"en-us|name"}) private String name; ... } 导出时指定语言

    1.6K20
    领券