【第22期】观点:IT 行业加班,到底有没有价值?

程序的环境

原创 2016年05月30日 13:34:47

在ANSI C的任何一种实现中,都存在两种环境,翻译环境和执行环境。

一、翻译环境

在翻译环境中源代码被转成了机器指令。

翻译由好几个步骤组成,组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。然后目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序。链接器同时也会引入标准函数库中任何被改程序所用到的函数,包括程序员引入自己定义的头文件中的函数。这个过程发生在预处理阶段(添加头文件,替换指令,替换宏)

①预处理

    这是编译过程的第一个阶段,它将一个程序引用的头文件在程序里做一份拷贝,并且替换宏等,在源代码上执行一些文本操作。

②解析

    经过了编译阶段之后程序进入了解析阶段,在解析程序阶段,将产生错误报告和警告,并且在我们程序 指明优化处进行优化处理让程序的效率更高。

③生成目标文件

     此时可能生成一个或多个目标文件

④链接

    我们通过链接器将几个目标文件进行链接

**    在UNIX系统中C的编译器被称为cc,它可以使用许多不同的方式来调用。

    1.编译一个C源代码

       eg:cc  program.c

               gcc  program.c

    这两条指令产生的结果相同,他们会生成一个a.out可执行程序。中间会产生一个名为program.o的目标文件,但它在链接过程完成之后就会被删除。

    2. 同时链接几个源文件

        eg:cc  1.c  2.c  3.c

    3.编译一个C源文件,并使其和现存的可执行文件链接起来

        eg:cc main.c lookup.o sort.c

    4.编译一个源文件并使其生成一个指定的可执行文件

        eg:cc main.c -o test

     此时你会发现,生成的可执行文件不再叫a.out而是叫做test

二、执行

①程序载入内存

    在具有操作系统的环境里该过程由操作系统来完成。在独立环境中必须手动完成。

②初始化没有被初始化的变量

    静态变量会被默认初始化,而其它没有被初始化的变量被初始化成“垃圾”

③小型启动程序

    它负责处理一堆日常事务 ,比如收集命令行参数等。

④调用main函数

⑤程序的终止

    这是执行的最后一个阶段,他可能由不同的原因引起,正常的终止是程序就是 main函数的返回。

    程序可能是由于用户按下break键而终止也有可能是电话连接的挂起而终止,也可能是由于出现错误而出现自行中断。


知识链接:a.out是"assembler output"的缩写格式,代表汇编程序输出。在较早版本的类unix系统中,a.out是一种输出格式,用于可执行文件,目标文件和共享库。早期的 PDP-7系统上没有链接器,程序的创建过程是先把所有源文件连接成一个文件,然后进行汇编,产生的汇编程序保存在a.out中。这样a.out是名副其实的汇编输出,但到PDP-11之后,人们为其编写了链接器,程序的创建是先编译然后链接输出保存到a.out中,这时a.out其实已经是链接输出了,但输出的可执行文件仍然延续这个命名习惯。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

各种桌面环境下设置开机自启动应用程序的方法

本教程中将介绍如何在各种Linux桌面环境下,自动启动某个程序。  GNOME桌面环境  在终端中运行这个命令,启动"Startup Applications Preferences"(启动应用程序首...

Linux环境下使用eclipse开发C++动态链接库程序

Linux中也有类似windows中DLL的变成方法,只不过名称不同而已。在Linux中,动态链接叫做Standard Object,生成的动态链接文件为*.so。详细请参考相关文档。 <span style="color:

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Android应用程序开发环境的建立

注: 本片文章简单的描述一下Android应用程序开发环境的建立。如果有不正确或者不完善的地方,欢迎前来拍砖留言或者发邮件到guopeixin@126.com进行讨论,先行谢过。一.准备工作... 2...

应用程序架构本质,第 4 部分: 创建灵活环境以支持发展

在创建可经受时间考验的强健应用程序体系结构时需要考虑许多因素,如建模、必要条件、设计、流程、性能等。不过,有时会忽略应用程序体系结构的如下方面,因为它不是整个流程的量化部分:发展。公司、行业、业务策略、客户——所有这些领域都会随着时间的推移而发展和变化。 当设计应用程序体系结构时,规划体系结构的发...

C语言程序环境和预处理

我们在写完代码后需要对代码进行编译和执行,点完按钮后编译器就自动生成了结果,难道小伙伴们不好奇编译执行过程中发生了什么事情吗?今天就来写一下程序环境和预处理。 C语言程序环境 翻译环境和执行环境...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)