C Primer笔记之概述

C Primer笔记之概述

计算机的运行方式

 

CPU的工作一般来说就是从内存中取出指令并执行该指令,然后再取出下一条指令并执行。由于CPU的运算速度比内存快的多。所以,增加了寄存器,当CPU运算过程中,会预先把数据从内存中取至寄存器中。所以CPU一般是直接从寄存器中取数据。

  计算机中存储的一切内容都是数字。数字是以数字存储的,字符也是以数字形式存储的,每个字符有一个数字码。计算机装载至寄存器中的指令也是以数字形式存储的,指令集中的每条指令具有一个数字代码。计算机程序也必须以这种数字指令代码(或称)机器语言来表示。

 

明白了计算机的运行方式后,那如果希望计算机做一件事,就必须提供特定的指令表,确切的告诉计算机要做的事及如何去做。就必须以一种计算机可以直接理解的语言(指令集)来创建程序。

 

因此就出现了C这样的高级语言,就不必用数字代码表示指令也更接近人的思维方式。但是机器并不理解高级语言,所以必须将高级语言转换成机器语言,就用到了编译。

 

目标代码文件可执行文件和库

 

 C编程的基本策略是使用程序将源代码文件转换成可执行文件,此文件包含可以运行的机器语言代码。C分两步完成这个工作:编译和连接。编译器将源代码转换成中间代码,链接器将此中间代码与其他代码相结合生成可执行文件。

 中间文件的形式可以有多种选择,最一般的选择,是将源代码转换成机器语言代码,将结果放在一个目标代码文件中。虽然目标代码文件包含机器代码,但该文件还不能运行,目标文件包含源代码文件的转换结果,但还不是一个完整的程序。

目标代码文件所缺少的第一个元素是启动代码,此代码相当于程序与操作系统的接口。

所缺少的第二个元素是库程序代码,如printf(),函数指令实际代码是存储在另一个库文件中,库文件中包含了许多函数的目标代码。

链接器是将这3个元素(目标代码,系统的标准启动代码和库代码)结合在一起,并将它们存放在单个文件,即可执行文件。对库代码来说,链接器只从库中提取使用的函数的代码。

 

简言之,目标文件和可执行文件都是机器语言指令组成,但目标文件只包含所编写的代码转换后成的机器语言,而可执行文件还包含所使用的库例程以及启动代码的机器代码。

 

注意:在一些系统上必须分别运行编译和链接程序。而在另一些系统上,编译器可以自动启运链接器,所以只须给出编译命令即可。

 

所以不同的编译环境使程序具有不同的启动代码及不同的库代码。

 

Unix 编译环境

 

编辑源文件,

CC 源文件

则会生成a.out 的新文件,此文件是包含源文件编译结果的可执行文件。要运行该文件则./a.out

 

如果希望保存该结果(a.out)则必须对其进行重命名,否则该文件会被下次编译结果覆盖。

C源代码通常保存以.c扩展名的文件中,由#include 指令包含的C源代码的文件被称为头文件,通常具有扩展名.h,至于目标文件名,不同的环境可能具有不同的约定如:Unix 系统,扩展名为.o,

DOS系统则是.obj.

 

编译和链接:

 

   1 编译和链接一个完全包含于一个源文件的C程序.

     cc program.c

    这条命令产生一个称为a.out 的可执行文件。中间会产生一个program.o的目标文件,但它在链接过程完成后会自动删除。

   2 编译并链接几个C源文件:(会自动执行链接)

    cc main.c sort.c lookup.c

    当编译文件超过一个时,目标文件不会被删除,这就允许你对程序进行修改后,只对那些进行改动的源文件进行重新编译,如下一条命令所示:

   3 编译一个C源文件,并把它和现有的目标文件链接在一起。

     cc main.o sort.o lookup.c

   4 编译单个C源文件,并产生一个目标文件,以后再进行链接。

     cc -c program.c

会产生 program.o文件,但不会被删除。

5 编译几个C源文件,并为每个源文件产生一个目标文件。

   cc –c main.c sort.c looup.c

 此时应该不会自动执行链接。

6 链接几个目标文件:

  Cc main.o sort.o lookup.o

 

 

语言标准:

 

只所以要了解语言标准,是因为现在许多书是基于不同的标准写的,说法规则有些差别。只有知道它是基于哪个标准的才能明白,这个地方为什么这么写。

 

ANSI/ISO 标准:

 

美国国家标准化组织(ANSI)在1989年(ANSI C)定义了语言和一个标准C库,国际标准化组织(ISO)在1990年采用了一个新标准(ISO C,ISO C ANSI C实际上是同一个标准,因为ANSI版本是首次出现的,所以一直沿用ANSI C这一术语。

 

C99标准:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值