我的编程空间,编程开发者的网络收藏夹
学习永远不晚

c语言中源文件编译后生成什么文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

c语言中源文件编译后生成什么文件

本教程操作环境:windows7系统、c99版本、Dell G3电脑。

C语言源文件的编译

C语言源文件后缀名是“.c”,编译生成的文件后缀名是“.obj”,连接后可执行文件的后缀名是“.exe”。

C语言创建程序的步骤:

  • 编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。

  • 编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。(该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)

  • 链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件。在windows下扩展名为.exe,Unix下无扩展名。

  • 执行:运行程序。

C语言源程序经过C语言编译程序编译之后,生成一个后缀为“.OBJ”的二进制文件(称为目标文件),最后还要由称为“连接程序”(Link)的软件,把此“.OBJ”文件与c语言提供的各种库函数连接在一起,生成一个后缀“.EXE”的可执行文件。显然C语言不能立即执行。

过程图解如下:

1.jpg

从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。

编译过程

  • 编译过程又可以分成两个阶段:编译会汇编

编译:编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段:

第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中。这个在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计 算机和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。

主要是以下几方面的处理:

  • 宏定义指令,如 #define a b
    • 对于这种伪指令,预编译所要做的是将程序中的所有a用b替换,但作为字符串常量的 a则不被替换。还有 #undef,则将取消对某个宏的定义,使以后该串的出现不再被替换。
  • 条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等
    • 这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。
  • 头文件包含指令,如#include 'FileName'或者#include 等
    • 在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在 /usr/include目录下。在程序中#include它们要使用尖括号(< >)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号('')。
  • 特殊符号,预编译程序可以识别一些特殊的符号
    • 例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。

预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。

第二个阶段编译、优化阶段,经过预编译得到的输出文件中,只有常量,如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,}, +,-,*,\等等。

  • 编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
  • 优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。
  • 对于前一种优化,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。
  • 后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重要的研究课题。

汇编:汇编实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:

  • 代码段:该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。
  • 数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。

  UNIX环境下主要有三种类型的目标文件:

  • 可重定位文件:其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。
  • 共享的目标文件:这种文件存放了适合于在两种上下文里链接的代码和数据。第一种是链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个目标文件;第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象。
  • 可执行文件:它包含了一个可以被操作系统创建一个进程来执行之的文件。汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。

链接过程:

由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。

  • 例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
  • 链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体。

  根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种:

  • 静态链接:在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
  • 动态链接:在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。

对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。

相关推荐:《C视频教程》

以上就是c语言中源文件编译后生成什么文件的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

c语言中源文件编译后生成什么文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

c语言中源文件编译后生成什么文件

c语言编译后生成“.OBJ”的二进制文件(目标文件)。在C语言中,源程序(.c文件)经过编译程序编译之后,会生成一个后缀为“.OBJ”的二进制文件(称为目标文件);最后还要由称为“连接程序”(Link)的软件,把此“.OBJ”文件与c语言提供的各种库函数连接在一起,生成一个后缀“.EXE”的可执行文件。
2022-11-23

c语言中源文件编译后生成的文件是什么

这篇文章主要介绍“c语言中源文件编译后生成的文件是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“c语言中源文件编译后生成的文件是什么”文章能帮助大家解决问题。c语言编译后生成“.OBJ”的二进制
2023-07-04

linux中把.c的文件编译成.so文件

linux中共享库以so为后缀(shared object),与Windows下的DLL类似,是在程序运行时动态连接。多个进程可以连接同一个共享库。 以下以编译mylib.c为例讲如何编译.so文件。 首先,编译mylib.c: $
2022-06-04

c语言编译器怎么改成中文

c 语言编译器切换为中文方法:1. 下载并安装中文语言包;2. 在 visual studio 中切换语言设置;3. 重启 visual studio;4. 验证语言是否已切换为中文。C 语言编译器如何切换为中文1. 下载中文语言包前往
c语言编译器怎么改成中文
2024-04-05

如何对Python编译PyInstaller打包生成的exe文件进行反编译生成pyc、py源代码文件

很多开发者没有发布源程序代码,而是将代码封装为exe可执行文件,这样不仅更有利于程序传播,下面这篇文章主要介绍了如何对Python编译PyInstaller打包生成的exe文件进行反编译生成pyc、py源代码文件的相关资料,需要的朋友可以参考下
2023-01-18

c语言编译器怎么调中文

配置 c 语言编译器以输出中文需要:1. 设置 lc_all 环境变量为 zh_cn.utf-8;2. 安装并启用相应的语言包;3. 使用特定编译器选项(gcc:-finput-charset=utf-8、-fexec-charset=ut
c语言编译器怎么调中文
2024-04-05

c语言软件怎么改成中文

将 c 语言软件本地化为中文需要国际化和本地化过程。国际化包括提取可翻译字符串并创建消息目录,而本地化涉及创建中文翻译并将其添加到消息目录中。需要考虑字符编码、日期和数字格式以及用户界面调整等因素。可以使用工具和框架来简化本地化过程,但需要
c语言软件怎么改成中文
2024-03-15

c语言软件怎么换成中文

将 c 语言软件切换为中文,需要执行以下步骤:选择编译器并设置中文界面语言。在源文件中添加 #define _default_source。使用编译器命令编译程序。运行程序,此时界面将显示为中文。如何将 C 语言软件切换为中文第一步:选择
c语言软件怎么换成中文
2024-04-13

c语言编译器怎么改中文版

要将 c 编译器更改为中文版,需执行以下步骤:下载中文版 mingw 编译器;安装编译器并选择中文版;设置环境变量 path;测试编译器。若命令行输出中文,则表明编译成功。如何将 C 语言编译器更改为中文版要将 C 编译器更改为中文版,您
c语言编译器怎么改中文版
2024-04-05

c语言编译器怎么调中文版

将 c 语言编译器设置为中文版方法:下载中文语言包:从微软网站下载相应语言包。安装语言包:按照提示进行安装并重启 visual studio。将界面语言设为中文:在“选项”对话框中,选择“环境”>“国际设置”,将“显示语言”设置为“中文(简
c语言编译器怎么调中文版
2024-04-05

c语言软件改成中文怎么改

要汉化 c 语言软件,需下载匹配的汉化包,备份原始文件,翻译文本(修改源代码),替换二进制文件,重新编译(如有必要),并测试汉化。如何将 C 语言软件汉化要将 C 语言软件汉化,需要进行以下步骤:1. 准备汉化包下载与您的软件版本相匹
c语言软件改成中文怎么改
2024-04-05

c语言编程软件怎么调中文

c++kquote>visual studio code、code::blocks、dev-c++、eclipse ide 和 qt creator 均可切换为中文。步骤如下:visual studio code:修改 "locale.js
c语言编程软件怎么调中文
2024-04-05

c语言源程序文件名的后缀是哪个

这篇文章将为大家详细讲解有关c语言源程序文件名的后缀是哪个,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。c语言源程序文件名的后缀是“.c”。c语言源程序经过C编译程序编译生成后缀为“.obj”的二进制文件
2023-06-14

linux中gcc编译c文件的步骤是什么

在Linux中,使用gcc编译C文件的步骤如下:1. 打开终端并切换到存放C代码的目录。2. 使用文本编辑器创建一个C源文件,例如`hello.c`。3. 输入C代码。4. 保存文件并关闭编辑器。5. 在终端中运行以下命令:`gcc -o
2023-09-22

c语言编译器怎么调中文字体

为 c 语言编译器设置中文字体,首先需要在编译器设置中选择中文字体。windows 和 linux 系统需要分别修改终端设置,以显示中文字体。注意:确保编译器和终端都支持您选择的中文字体。如何为 C 语言编译器设置中文字体要为 C 语言编
c语言编译器怎么调中文字体
2024-04-05

c语言编译器怎么调中文模式

要切换 c 语言编译器到中文模式,需设置环境变量“lc_messages”为“zh_cn.utf-8”:打开“系统属性”,点击“环境变量”;创建新环境变量,变量名为“lc_messages”,变量值为“zh_cn.utf-8”;保存更改,重
c语言编译器怎么调中文模式
2024-04-05

CMake编译中的库文件和头文件链接是什么

这篇文章主要介绍了CMake编译中的库文件和头文件链接是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CMake编译中的库文件和头文件链接是什么文章都会有所收获,下面我们一起来看看吧。外部库文件、头文件链接
2023-06-29

C语言中文件打开模式是什么

这篇文章主要讲解了“C语言中文件打开模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中文件打开模式是什么”吧!1、文件分为ASCII文件和二进制文件,ASCII文件也称文本文件
2023-06-08

C语言中常用的头文件是什么

这篇文章主要介绍“C语言中常用的头文件是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中常用的头文件是什么”文章能帮助大家解决问题。1.:定义了输入输出函数、类型以及宏,
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录