C语言环境内容

1.C存在两种不同的环境,第一种环境为翻译环境,源代码比转换为可执行机器命令;第二种环境为执行环境,它用于实际执行代码。标准明确说明,这两种环境不必位于同一台机器上。
2.翻译
翻译阶段由几个步骤组成,组成一个程序的每个(有可能有多个)源文件通过编译过程分别转换为目标代码(objectcode)。然后,各个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它也可以搜索程序员个人的程序库,将其中需要使用的函数也链接到程序中。图2.1描述了这个过程。编译过程本身也由几个阶段组成,首先是预处理器(preprocessor)处理。在这个阶段,预处理器在源代码上执行一些文本操作。例如,用实际值代替由#define指令定义的符号以及读入#include指令包含的文件的内容。然后,源代码经过解析(parse),判断它的语句的意思。第2个阶段是产生绝大多数错误和警告
信息的地方。随后,便产生目标代码。目标代码是机器指令的初步形式,用于实现程序的语句。如果我们在编译程序的命令行中加入了要求进行优化的选项,优化器(optimizer)就会对目标代码进一步进行处理,使它效率更高。优化过程需要额外的时间,所以在程序调试完毕并准备生成正式产品之前一般不进行这个过程。至于目标代码是直接产生的,还是先以汇编语言语句的形式存在,然后再
经过一个独立的阶段编译成目标文件,对我们来说并不重要。
在这里插入图片描述
—、文件名约定
尽管标准并没有制定文件的取名规则,但大多数环境都存在你必须遵守的文件名命名约定。c
源代码通常保存于以.c扩展名命名的文件中。由#include指令包含到C源代码的文件被称为头文件,
通常具有扩展名.丄
至于目标文件名,不同的环境可能具有不同的约定。例如,在UNIX系统中,它们的扩展名是.0,
但在MS-DOS系统中,它们的扩展名是.obj。
二、编译和链接
用于编译和链接C程序的特定命令在不同的系统中各不相同,但许多都和这里所描述的两种系
统差不多。在绝大多数UNIX系统中,C编译器被称为cc,它可以用多种不同的方法来调用。

  1. 编译并链接一个完全包含于一个源文件的C程序:
    cc program.c
    这条命令产生一个称为a.out的可执行程序。中间会产生一个名为program.o的目标文件,但它
    在链接过程完成后会被删除。
  2. 编译并链接几个C源文件:
    cc main.c sort.c lookup.c
    当编译的源文件超过一个时,目标文件便不会被删除。这就允许你对程序进行修改后,只对那
    些进行过改动的源文件进行重新编译,如下一条命令所示。
  3. 编译一个C源文件,并把它和现存的目标文件链接在一起:
    cc main.o lookup.o sort.c
  4. 编译单个c源文件,并产生一个目标文件(本例中为program.。),以后再进行链接:
    cc 一c program.c
  5. 编译几个C源文件,并为每个文件产生一个目标文件:
    cc -c main,c sort.c lookup.c
    6.链接几个目标文件:
    cc main.o sort.o lookup.o
    上面那些可以产生可执行程序的命令均可以加上“-oname"这个选项,它可以使链接器相可执
    行程序保存在“nam矿文件中,而不是“a.out”。在缺省情况下,链接器在标准C函数库中査找。如果
    在编译时加上“-Iname"标志,链接器就会同时在“name”的函数库中进行査找。这个选项应该出
    现在命令行的最后。除此之外,编译和链接命令还有很多选项,请查阅你所使用的系统的文档。
    用于MS-DOS和Windows的Borland C/C++ 5.0有两种用户界面,你可以分别选用。Windows
    集成开发环境是一个完整的独立编程工具,它包括源代码编辑器、调试器和编译器。它的具体使用
    不在本书的范围之内。MS-DOS命令行界面则与UNIX编译器差不太多,只是有下面几点不同:
  6. 它的名字是bcc。
  7. 目标文件的名字是file.。"。
  8. 当单个源文件被编译并链接时,编译器并不删除目标文件。
  9. 在缺省情况下,可执行文件以命令行中第一个源或目标文件名命名,不过你可以使用w-enamew
    选项把可执行程序文件命名为"name.exe”。
    2.1.2执行
    程序的执行过程也需要经历几个阶段。首先,程序必须载入到内存中。在宿主环境中(也就是具有操作系统的环境),这个任务由操作系统完成。那些不是存储在堆栈中的尚未初始化的变量将在这个时候得到初始值。在独立环境中,程序的载入必须由手工安排,也可能是通过把可执行代码置入只读内存(ROM)来完成。
    然后,程序的执行便开始。在宿主环境中,通常一个小型的启动程序与程序链接在一起。它负责处理一系列日常事务,如收集命名行参数以便使程序能够访问它们。接着,便调用main函数。现在,便开始执行程序代码。在绝大多数机器里,程序将使用一个运行时堆栈(stack),它用于存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程中将一直保留它们的值。程序执行的最后一个阶段就是程序的终止,它可以由多种不同的原因引起。“正常"终止就是main函数返回I。有些执行环境允许程序返回一个代码,提示程序为什么停止执行。在宿主环境中,
    启动程序将再次取得控制权,并可能执行各种不同的日常任务,如关闭那些程序可能使用过但并未显式关闭的任何文件。除此之外,程序也可能是由于用户按下break键或者电话连接的挂起而终止,另外也可能是由于在执行过程中出现错误而自行中断。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值