c语言多文件程序编译和链接,C语言知识汇总 | 04-源文件、可执行程序、编译与链接...
一、源文件(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-源文件、可执行程序、编译与链接...相关推荐
- c语言循环读文件程序,c语言读文件程序报告.docx
----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方 ----------专业最好文档,专业为你服务,急你所急,供你所需----------- ...
- c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)
我们发现,无论是静态链接库还是动态链接库,最后都有lib文件,那么两者区别是什么呢? 其实,两个是完全不一样的东西.静态库对应的lib文件叫静态库,动态库对应的lib文件叫导入库.实际上静态库本身就包 ...
- c语言转换为stc程序,STC51单片机入门(C语言)
以前老资料,可继续下载参考. 目 录 第1篇 单片机KEIL开发环境 第1章 点亮LED实例与经典延时程序介绍(看不懂就从第2章动手) 1.1 51单片机最小系统与芯片引脚图 1.2 点亮LED ...
- 用 C 语言编写的程序被称为,用c语言编写的程序被称为
快速导读: Q1:用C语言编写以下程序 #includeintmain(void){ intm,n,i,t; printf("InputM,N(int0if(scanf("%d%d ...
- c语言遍历文件内容_跨平台的C语言网络框架库acl
acl概述 acl (全称Advanced C Library)是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架,同时提供更多的实用功 ...
- 国二C语言文字选择程序选择,国二c语言考什么?
国家二级C语言考试内容主要有:C语言程序的结构.数据类型及运算.选择结构程序设计.循环结构.数组的定义和引用.函数.编译预处理.指针.结构体.位运算.文件操作. 一.C语言程序的结构考点又包括: 1. ...
- c语言删除文件中的结构体_C语言插入、删除、更改文件内容
我们平时所见的文件,例如 txt.doc.mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件. 除了顺序文件,还有索引文件.散列文件等,一般用于特殊领域, ...
- c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解
用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...
- 程序员学c语言吗,为什么程序员要学C语言
请点击此处输入图片描述 C语言不是面向对象语言.因为这一点,任何程序员学习C语言必须学会用函数思考问题.当程序员真正的去学习一门面向对象语言时,就会有C语言的函数学习基础去对比.这会使学习面向对象编程 ...
最新文章
- 【咸鱼教程】震屏效果
- Salesforce - soql 多字段多值过滤查询思路
- 操作系统【逻辑空间、物理空间与页表大小的关系】【分页地址映射(方法+例题)】
- c++容器共性机制研究
- 利用福禄克DSX2-5000 CH解决双绞线布线中常见的故障
- linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务
- Redis有几种数据类型?文末领取面试资料
- 关于MVC打印问题,打印指定的内容
- windows运行命令大全
- MEMS传感器的下一轮技术变革
- 写好的python如何在其它电脑上运行_写人作文-写人作文300字-400字-500字
- Survey of Aspect-based Sentiment Analysis Datasets
- android 缓存头像,android 实现类似微信缓存和即时更新好友头像
- 产品黑魔法:腾讯搞流量的重要一课
- 随机梯度下降法步长的选择
- 接口开放平台,我的一些思考
- 英语日常用语900句(5)
- 损失函数理解汇总,结合PyTorch和TensorFlow2
- 家乡的春节html,家乡的春节作文(通用10篇)
- 用HTML做一个圆形,css如何制作圆?
热门文章
- EMV技术学习和研究
- 考研英语作文评分标准是怎样?
- 如何JAVA中模拟实现双色球
- android手机连接无线路由器上网设置,手机如何设置无线路由器 手把手教你使用手机设置路由器...
- 计算机统考专业课推荐参考书与辅导书
- LINGO求解结果解析——影子价格、RSR、OCR
- 企业网管软件实战之看视频学装Cisco Works 2000
- STM32F103通用定时器原理
- MSDN的系统服务列表(XP2003) 【目前最全的吧。。】
- 台式计算机风扇声音大怎么处理,台式win7 64位旗舰版系统电脑风扇噪音很大怎么办...