美文网首页
C语言教程(008)-这些乱七八糟的文件是什么?

C语言教程(008)-这些乱七八糟的文件是什么?

作者: 爱学习的老周 | 来源:发表于2019-09-20 21:13 被阅读0次

    这些乱七八糟的文件是什么?

    编译一个项目之后,你会发现在项目目录里多了很多文件,这些文件是什么?有什么作用?

    1、源文件(Source File)

    我们之前写了几段代码了,创建了几次以.c为后缀的文件,将你写的代码保存起来的文件就叫源文件。

    每种编程语言的源文件都有特定的后缀,以便于编译器对源文件的识别。一般来说,后缀名都是以编程语言名称来命名的。例如Java源文件的后缀是.java,Python的源文件后缀是.py

    源文件只是一个文本文件,内部没有特殊格式。所以,就算你创建一个.txt的文本文件,把代码保存进去,再将.txt改为.c,对编译器依旧有效的。总而言之,后缀仅仅是为了让编译器识别它,让程序员更容易理解。

    2、项目(project)

    一个完整的项目往往包含很多功能,实现这些功能不仅需要成千上万行代码,还有可能包含图片,音视频等资源文件。我们不能将所有代码都写在一个源文件里,这样不仅打开缓慢,开发和维护也会极为困难。也不能将种类繁多的资源文件放在一起。

    我们总是建议将不同功能的代码写在不同的源文件中,将不同的资源文件分类管理。为了有效地管理这些种类繁杂、数目众多的文件,我们有理由把它们都放到一个目录(文件夹)下,并且这个目录下只存放与当前程序有关的资源。实际上 IDE 也是这么做的,它会为每一个程序都创建一个专门的目录,将用到的所有文件都集中到这个目录下,并对它们进行便捷的管理,比如重命名、删除文件、编辑文件等。

    这个为当前程序配备的专用文件夹,在 IDE 中也有一个专门的称呼,叫“Project”,翻译过来就是“工程”或者“项目”。

    3、工程类型/项目类型

    “程序”是一个比较宽泛的称呼,它可以细分为很多种类,例如:

    • 有的程序不带界面,完全是“黑屏”的,只能输入一些字符或者命令,称为控制台程序(Console Application),例如 Windows 下的 cmd.exe,Linux 或 Mac OS 下的终端(Terminal)。
    • 有的程序带界面,能够使用鼠标点击,称为GUI程序(Graphical User Interface Program),例如 QQ、迅雷、Chrome 等。
    • 有的程序不单独出现,而是作为其它程序的一个组成部分,普通用户很难接触到它们,例如静态库、动态库等。

    不同的程序对应不同的工程类型(项目类型),使用 IDE 时必须选择正确的工程类型才能创建出我们想要的程序。换句话说,IDE 包含了多种工程类型,不同的工程类型会创建出不同的程序。

    4、编译器是如何编译的?

    当你启动编译器,就开始以下步骤:

    • 将源文件转换成中间文件。如果有多个源文件,则会生成多个中间文件,中间文件的后缀是.obj。C使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,如果只更改某个模块,不必因此重新编译其它模块。中间文件已经非常接近可执行文件了,它们都是二进制格式,内部结构也非常相似,但仍不是可执行文件。

    • 链接器将这些中间文件组合起来,另外,链接器还将你编写的程序与预编译的库代码合并,例如上述程序中我们经常用到的printf()函数。中间代码文件中并不包含该函数的代码,它只是包含了使用该函数的指令。而该函数的代码储存在另一个被称为库的文件中。此外,中间代码文件还缺失启动代码。启动代码充当着程序和操作系统之间的接口。所以,连接器的作用就是,把你编写的目标代码,系统的标准启动代码和库代码这3部分合并成一个文件,即可执行文件。可执行文件的后缀是.exe。可执行文件的执行不依赖于目录中的其它文件,你将它单独拿出来,也是可以执行的。

    注意:这就是为什么,你的写了一个最简单的程序之后,文件夹里会多出一些文件。需要注意的是,不同的开发工具对这些文件的管理方式不同,例如你用Visual Studio创建一个项目后,会多出一个.sln文件,这个是解决方案,解决方案比项目又高一层,也就是说,一个解决方案包含多个项目。(解决方案文件通常很小,这是因为它里面并不包含所有项目的文件,而是只包含索引,这样你打开一个解决方案,就能发现同时打开的还有该目录下的一个或者多个项目。)

    相关文章

      网友评论

          本文标题:C语言教程(008)-这些乱七八糟的文件是什么?

          本文链接:https://www.haomeiwen.com/subject/vvtsuctx.html