1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritch)和肯·汤普逊(Ken Thompson)在开发UNIX操作系统时设计了C语言。
C语言是在B语言(汤普逊发明)的基础上进行设计的。C 语言设计的初衷是将其作为程序员使用的 一种编程工具,因此,其主要目标是成为有用的语言。最初为程序员设计开发的C语言,现在已成为首选的编程语言之一。
————————————————————————————————————————————————————————————
1.设计特性(自顶向下的规划、结构化编程和模块化设计)
2.高效性(具有微调控制能力,可以根据具体情况微调程序以获得最大运行速度或最有效地使用内存)
3.可移植性(在一种系统中编写的C程序稍作修改或不修改就能在其他系统运行)
4.强大而灵活
5.面向程序员(满足程序员的需求)
(缺点:涉及指针的编程错误难以察觉;代码可以变得晦涩)
————————————————————————————————————————————————————————————
早在20世纪80年代,C语言就已经成为小型计算机(UNIX系统)使用的主流语言。
从那以后,C语言的应用范围扩展到微型机(个人计算机)和大型机(庞然大物)。
许多软件公司都用C语言来开发文字处理程序、电子表格、编译器和其他产品。
不一定非得是计算机专家也能使用C语言。
C++几乎是C的超集,这意味着任何C程序差不多就是一个C++程序。学习C语言,也相当于学习了许多C++的知识。
虽然这些年来C++和JAVA非常流行,但是C语言仍是软件业中的核心技能。
————————————————————————————————————————————————————————————
简而言之,计算机的工作原理是:如果希望计算机做某些事,就必须为其提供特殊的指令列表(程序),确切地告诉计算机要做的事以及如何做。你必须用计算机能直接明白的语言(机器语言)创建程序。
(可适当了解计算机的多种部件及其他方面,如CPU,RAM和寄存器等)
————————————————————————————————————————————————————————————
使用高级编程语言,可以在更抽象的层面表达你的想法,不用考虑CPU在完成任务时具体需要哪些步骤,且高级编程语言比机器语言简单易学。
编译器是把高级语言程序翻译成计算机能理解的机器语言指令集的程序。
使用合适的编译器或编译器集,便可把一种高级语言程序转换成供各种不同类型 CPU 使用的机器语言程序。
————————————————————————————————————————————————————————————
C语言发展之初,并没有所谓的C标准。1987年,布莱恩·柯林汉(BrianKernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The C ProgrammingLanguage(《C语言程序设计》)第1版是公认的C标准,通常称之为K&R C或经典C。
美国国家标准协会(ANSI)于 1983 年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。ANSI/ISO标准的最终版本通常叫作C89(因为ANSI于1989年批准该标准)或C90(因为ISO于1990年批准该标准)。另外,由于ANSI先公布C标准,因此业界人士通常使用ANSI C。
1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。该委员会遵循了最初C90标准的原则,委员会的用意不是在C语言中添加新特性,而是为了达到新的目标:支持国际化编程,“调整现有实践致力于解决明显的缺陷”,提高C的适应力(使其更具有竞争力)。
标准委员会在2007年承诺C标准的下一个版本是40C1X,2011年终于发布了C11标准。
注意:C primer plus中使用术语ANSI C、ISO C或ANSI/ISO C讲解C89/90和较新标准共有的特性,用C99或C11介绍新的特性。有时也使用C90(例如,讨论一个特性被首次加入C语言时)。
————————————————————————————————————————————————————————————
编程并非像描述那样是一个线性的过程。有时,要在不同的步骤之间往复。例如,在写代码时发现之前的设计不切实际,或者想到了一个更好的解决方案,或者等程序运行后,想改变原来的设计思路。对程序做文字注释为今后的修改提供了方便。
要编写的程序越大越复杂,事先定义和设计程序环节的工作量就越大。
应该养成先规划再动手编写代码的好习惯,用纸和笔记录下程序的目标和设计框架。这样在编写代码的过程中会更加得心应手、条理清晰。
————————————————————————————————————————————————————————————
用C语言编写程序时,编写的内容被储存在文本文件中,该文件被称为源代码文件(source code file)。大部分C系统都要求文件名以.c结尾。在文件名中,点号(.)前面的部分称为基本名(basename),点号后面的部分称为扩展名(extension)。基本名与扩展名的组合就是文件名。文件名应该满足特定计算机操作系统的特殊要求。
假设一个名为concrete.c的源文件:
#include
int main(void)
{
printf("Concrete contains gravel and cement.\n");
return 0;
}
C编程的基本策略是,用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码)。典型的C实现通过编译和链接两个步骤来完成这一过程。编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。C 使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。通过这种方式,如果只更改某个模块,不必因此重新编译其他模块。另外,链接器还将你编写的程序和预编译的库代码合并。
中间文件有多种形式。我们在这里描述的是最普遍的一种形式,即把源代码转换为机器语言代码,并把结果放在目标代码文件(或简称目标文件)中(这里假设源代码只有一个文件)。虽然目标文件中包含机器语言代码,但是并不能直接运行该文件。因为目标文件中储存的是编译器翻译的源代码,这还不是一个完整的程序。
目标代码文件缺失启动代码(startup code)。启动代码充当着程序和操作系统之间的接口。(可以在MS Windows或Linux系统下运行IBM PC兼容机。这两种情况所使用的硬件相同,所以目标代码相同,但是Windows和Linux所需的启动代码不同,因为这些系统处理程序的方式不同)
目标代码还缺少库函数。几乎所有的C程序都要使用C标准库中的函数。在源文件被调用的函数真正的代码储存在另一个被称为库的文件中。库文件中有许多函数的目标代码。
链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码这 3 部分合并成一个文件,即可执行文件。对于库代码,链接器只会把程序中要用到的库函数代码提取出来(见图)。
————————————————————————————————————————————————————————————
C是强大而简洁的编程语言。它之所以流行,在于自身提供大量的实用编程工具,能很好地控制硬件。而且,与大多数其他程序相比,C程序更容易从一个系统移植到另一个系统。
C是编译型语言。C编译器和链接器是把C语言源代码转换成可执行代码的程序。
用C语言编程可能费力、困难,让你感到沮丧,但是它也可以激发你的兴趣,让你兴奋、满意。
————————————————————————————————————————————————————————————