C 程序是如何编译的(c 程序是如何编译的呢)

C语言的编译过程是将C语言源代码转换为机器代码的过程。由于C语言是一种中级语言,因此需要编译器将其转换为可执行代码,以便在我们的计算机上运行程序。

C程序在编译过程中经历以下阶段:

  1. 预处理
  2. 编译
  3. 汇编
  4. 链接

C 程序是如何编译的(c 程序是如何编译的呢)

编译流程

01 我们如何编译和运行C程序

我们需要一个编译器和一个代码编辑器来编译和运行C程序。下面示例是 gcc 编译器编写代码流程:

Step 1: 创建C源文件

我们首先使用编辑器创建一个C程序,并将文件保存为filename.c

vi filename.c

我们可以编写一个简单的 Hello World 程序并将其保存。

#include <stdio.h>int main() { printf("Hello, World!"); return 0;}

Step 2: 使用GCC编译器进行编译

我们在终端中使用以下命令编译我们的filename.c源文件

gcc filename.c –o filename

我们可以向GCC编译器传递许多指令以执行不同的任务,例如:

  • 选项-Wall启用所有编译器的警告消息。建议使用此选项以生成更好的代码。
  • 选项-o用于指定输出文件名。如果我们不使用此选项,则会生成一个名为a.out的输出文件。

Step 3: 执行程序

编译后生成可执行文件,我们使用以下命令运行生成的可执行文件。

./filename

程序将被执行,并且输出将显示在终端中。

C 程序是如何编译的(c 程序是如何编译的呢)

执行程序

02 编译过程内幕

C程序的编译过程包括以下四个步骤:预处理、编译、汇编和链接。

通过执行以下命令,我们获取当前目录中的所有中间文件以及可执行文件。

gcc -Wall -save-temps filename.c –o filename

C 程序是如何编译的(c 程序是如何编译的呢)

让我们一一看看这些中间文件包含什么。

预处理

在此阶段,源代码由预处理器处理。预处理器是在编译器编译源代码之前处理源代码的程序。预处理的主要目的是为编译做准备。预处理阶段包括以下几个步骤:

  • 删除注释
  • 宏扩展
  • 文件包含
  • 条件编译

预处理的输出存储在 filename.i 中。

  • 代码中的注释被删除
  • 头文件被展开,#include <stdio.h> 被删除

编译

在此阶段,编译器将源代码转换为汇编代码。编译器检查代码的语法和语义,以识别C程序中的任何语法问题或警告。

将 filename.i 编译输出为 filename.s,编译器生成的汇编文件。

C 程序是如何编译的(c 程序是如何编译的呢)

汇编

在此阶段,汇编器将汇编代码转换为机器代码,即将 filename.s 转为 filename.o,但函数调用(例如 printf())未解析。

链接

在链接阶段,链接器将可执行文件中的函数调用与库函数中的函数定义解析并链接在一起。链接器还会添加一些额外的代码,这些代码在程序启动和结束时需要,例如设置环境变量和传递命令行参数。通过使用 $size filename.o 和 $size filename 命令,我们可以轻松验证此任务。通过这些命令,我们可以了解输出文件从目标文件到可执行文件的增长情况。这是由于链接器添加到我们的程序中的额外代码所致。

C 程序是如何编译的(c 程序是如何编译的呢)

如果您发现任何不正确的内容或想分享有关上述主题的更多信息,请在评论区留言。

请关注微信公众号:Database Developer

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月1日 上午8:25
下一篇 2024年5月1日 上午8:36

相关推荐

  • 翻译项目怎么管理系统

    翻译项目怎么管理系统 翻译项目管理系统对于翻译团队来说非常重要,可以帮助翻译团队更好地管理翻译项目,提高工作效率,减少错误率。以下是一些翻译项目管理系统的基本功能和特点。 1. 项…

    科研百科 2024年12月17日
    0
  • 银行公司合同管理

    银行公司合同管理 随着金融市场的不断发展,银行公司合同管理也变得越来越重要。银行公司合同管理涉及到许多细节和挑战,包括合同的签订、履行、变更和终止等。因此,银行公司需要建立完善的合…

    科研百科 2024年5月25日
    60
  • 如何报考项目管理师

    如何报考项目管理师 项目管理师是一种具有广泛需求的证书,可以帮助个人和企业提高项目管理技能。如果您想报考项目管理师,以下是一些需要了解的信息。 首先,您需要了解项目管理师考试的时间…

    科研百科 2024年8月17日
    31
  • rfid管理平台(rfid资产管理系统软件)

    RFID资产管理系统软件: 提升资产管理效率的关键 RFID资产管理系统软件是一种先进的资产管理工具,可以帮助企业更好地管理其资产。它通过使用RFID技术,使资产能够被跟踪和管理,…

    科研百科 2024年6月2日
    98
  • 可用于研究项目的时间怎么写

    可用于研究项目的时间 时间是我们最宝贵的资源之一,可用于做许多有意义的事情。在可用于研究项目的时间方面,我们可以利用它们来深入探索我们感兴趣的主题,学习新的技能,以及为未来的职业做…

    科研百科 2024年12月5日
    0
  • 中级信息系统项目管理师

    中级信息系统项目管理师 随着信息技术的不断发展,信息系统项目管理师这个职位也逐渐成为了一个重要的职业。作为一个专业的项目管理师,中级信息系统项目管理师需要具备广泛的项目管理知识,包…

    科研百科 2024年5月23日
    115
  • 项目管理部

    项目管理部是公司中非常重要的一个部门,负责管理公司的项目。一个项目的成功离不开项目管理部的支持和管理。 项目管理部的工作主要包括以下几个方面: 1. 项目计划:项目管理部负责制定项…

    科研百科 2024年5月29日
    109
  • 美国科学奥秘揭秘:基础科研之路(美国的基础科学研究)

    美国科学享誉全球,凭借卓越实力及创新能力成为全球焦点。施一公亦曾指出,美国科学飞跃之大超乎了我们的预期,在科学研究中的巨大突破始终引导着世界潮流。本篇文章将深度剖析美国科学的奥秘所…

    科研百科 2024年4月19日
    91
  • 案例 – 市政工程项目管理:上海安亭建筑工程有限公司(上海亭全建设工程有限公司)

    企业简介 上海安亭建筑工程有限公司成立于1989年10月17日,属于上海的老牌企业,最早在1964年还是镇上的建筑工程队,在89年取得资质成立公司,和均泰建筑属于兄弟单位。 公司的…

    科研百科 2022年9月3日
    157
  • 基金会管理条例(基金会管理条例规定,基金会设理事会)

    基金会管理条例(2004年2月11日国务院第39次常务会议通过2004年3月8日中华人民共和国国务院令第400号公布 自2004年6月1日起施行) 第一章 总则 第一条 为了规范基…

    科研百科 2023年11月30日
    121