一、源文件(Source File)

在开发软件的过程中,需要将编写好的代码(Code)保存到一个文件中,这样代码才不会丢失,才能够被编译器找到,才能最终变成可执行文件。这种用来保存代码的文件就叫做源文件(Source File)。

每种编程语言的源文件都有特定的后缀,以方便被编译器识别,被程序员理解。源文件后缀大都根据编程语言本身的名字来命名,例如:

C 语言源文件的后缀是.c;

C++ 语言(C Plus Plus)源文件的后缀是.cpp;

Java 语言源文件的后缀是.java;

Python 语言源文件的后缀是.py;

JavaScript 语言源文件后置是.js。

源文件其实就是纯文本文件,它的内部并没有特殊格式,能证明这一结论的典型例子是:在 Windows 下用记事本程序新建一个文本文档,并命名为demo.txt,输入一段C语言代码并保存,然后将该文件强制重命名为demo.c(后缀从.txt变成了.c),发现编译器依然能够正确识别其中的C语言代码,并顺利生成可执行文件。

源文件的后缀仅仅是为了表明该文件中保存的是某种语言的代码(例如.c文件中保存的是C语言代码),这样程序员更加容易区分,编译器也更加容易识别,它并不会导致该文件的内部格式发生改变。

二、可执行程序(Executable Program)

平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。

可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。

例如,在屏幕上输出“VIP会员”,C语言的写法为:

puts("VIP会员");

二进制的写法为:

直接使用二进制指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且除错会异常苦恼,要直接面对一堆二进制数据。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。

三、编译(Compile)

C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,CPU只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序的格式;这个工具是一个特殊的软件,叫做编译器(Compiler)。

编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)。

编译也可以理解为“翻译”,类似于将中文翻译成英文、将英文翻译成象形文字,它是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤,期间涉及到复杂的算法和硬件架构。

C语言的编译器有很多种,不同的平台下有不同的编译器,例如:

Windows 下常用的是微软开发的 Visual C++,它被集成在 Visual Studio 中,一般不单独使用;

Linux 下常用的是 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC;

Mac 下常用的是 LLVM/Clang,它被集成在 Xcode 中(Xcode 以前集成的是 GCC,后来由于 GCC 的不配合才改为 LLVM/Clang,LLVM/Clang 的性能比 GCC 更加强大)。

编译器可以 100% 保证你的代码从语法上讲是正确的,因为哪怕有一点小小的错误,编译也不能通过,编译器会告诉你哪里错了,便于你的更改。

四、链接(Link)

C语言代码经过编译以后,并没有生成最终的可执行文件(.exe 文件),而是生成了一种叫做目标文件(Object File)的中间文件(或者说临时文件)。目标文件也是二进制形式的,它和可执行文件的格式是一样的。对于 Visual C++,目标文件的后缀是.obj;对于 GCC,目标文件的后缀是.o。

目标文件经过链接(Link)以后才能变成可执行文件。既然目标文件和可执行文件的格式是一样的,为什么还要再链接一次呢,因为编译只是将自己写的代码变成了二进制形式,它还需要和系统组件(比如标准库、动态链接库等)结合起来,这些组件都是程序运行所必须的。

链接(Link)其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)。

编译是针对一个源文件的,有多少个源文件就需要编译多少次,就会生成多少个目标文件。

五、总结

不管编写的代码有多么简单,都必须经过「编译 --> 链接」的过程才能生成可执行文件:

编译就是将我们编写的源代码“翻译”成计算机可以识别的二进制格式,它们以目标文件的形式存在;

链接就是一个“打包”的过程,它将所有的目标文件以及系统组件组合成一个可执行文件。

c语言多文件程序编译和链接,C语言知识汇总 | 04-源文件、可执行程序、编译与链接...相关推荐

  1. c语言循环读文件程序,c语言读文件程序报告.docx

    ----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方 ----------专业最好文档,专业为你服务,急你所急,供你所需----------- ...

  2. c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)

    我们发现,无论是静态链接库还是动态链接库,最后都有lib文件,那么两者区别是什么呢? 其实,两个是完全不一样的东西.静态库对应的lib文件叫静态库,动态库对应的lib文件叫导入库.实际上静态库本身就包 ...

  3. c语言转换为stc程序,STC51单片机入门(C语言)

    以前老资料,可继续下载参考. 目   录 第1篇 单片机KEIL开发环境 第1章  点亮LED实例与经典延时程序介绍(看不懂就从第2章动手) 1.1 51单片机最小系统与芯片引脚图 1.2 点亮LED ...

  4. 用 C 语言编写的程序被称为,用c语言编写的程序被称为

    快速导读: Q1:用C语言编写以下程序 #includeintmain(void){ intm,n,i,t; printf("InputM,N(int0if(scanf("%d%d ...

  5. c语言遍历文件内容_跨平台的C语言网络框架库acl

    acl概述 acl (全称Advanced C Library)是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架,同时提供更多的实用功 ...

  6. 国二C语言文字选择程序选择,国二c语言考什么?

    国家二级C语言考试内容主要有:C语言程序的结构.数据类型及运算.选择结构程序设计.循环结构.数组的定义和引用.函数.编译预处理.指针.结构体.位运算.文件操作. 一.C语言程序的结构考点又包括: 1. ...

  7. c语言删除文件中的结构体_C语言插入、删除、更改文件内容

    我们平时所见的文件,例如 txt.doc.mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件. 除了顺序文件,还有索引文件.散列文件等,一般用于特殊领域, ...

  8. c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解

    用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...

  9. 程序员学c语言吗,为什么程序员要学C语言

    请点击此处输入图片描述 C语言不是面向对象语言.因为这一点,任何程序员学习C语言必须学会用函数思考问题.当程序员真正的去学习一门面向对象语言时,就会有C语言的函数学习基础去对比.这会使学习面向对象编程 ...

最新文章

  1. 【咸鱼教程】震屏效果
  2. Salesforce - soql 多字段多值过滤查询思路
  3. 操作系统【逻辑空间、物理空间与页表大小的关系】【分页地址映射(方法+例题)】
  4. c++容器共性机制研究
  5. 利用福禄克DSX2-5000 CH解决双绞线布线中常见的故障
  6. linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务
  7. Redis有几种数据类型?文末领取面试资料
  8. 关于MVC打印问题,打印指定的内容
  9. windows运行命令大全
  10. MEMS传感器的下一轮技术变革
  11. 写好的python如何在其它电脑上运行_写人作文-写人作文300字-400字-500字
  12. Survey of Aspect-based Sentiment Analysis Datasets
  13. android 缓存头像,android 实现类似微信缓存和即时更新好友头像
  14. 产品黑魔法:腾讯搞流量的重要一课
  15. 随机梯度下降法步长的选择
  16. 接口开放平台,我的一些思考
  17. 英语日常用语900句(5)
  18. 损失函数理解汇总,结合PyTorch和TensorFlow2
  19. 家乡的春节html,家乡的春节作文(通用10篇)
  20. 用HTML做一个圆形,css如何制作圆?

热门文章

  1. EMV技术学习和研究
  2. 考研英语作文评分标准是怎样?
  3. 如何JAVA中模拟实现双色球
  4. android手机连接无线路由器上网设置,手机如何设置无线路由器 手把手教你使用手机设置路由器...
  5. 计算机统考专业课推荐参考书与辅导书
  6. LINGO求解结果解析——影子价格、RSR、OCR
  7. 企业网管软件实战之看视频学装Cisco Works 2000
  8. STM32F103通用定时器原理
  9. MSDN的系统服务列表(XP2003) 【目前最全的吧。。】
  10. 台式计算机风扇声音大怎么处理,台式win7 64位旗舰版系统电脑风扇噪音很大怎么办...