C语言特点:高效,灵活,可移植。
C语言的应用范围
早在20世纪80年代,C语言就已经成为小型计算机(UNIX系统)使用的主流语言。从那以后,C语言的应用范围扩展到微型机(个人计算机)和大型机(庞然大物)。许多软件公司都用C语言来开发文字处理程序、电子表格、编译器和其他产品,因为用 C语言编写的程序紧凑而高 效。更重要的是,C程序很方便修改,而且移植到新型号的计算机中也没什么问题。 无论是软件公司、经验丰富的C程序员,还是其他用户,都能从C语言中受益。越来越多的计算机用户已转而求助C语言解决一些安全问题。不一 定非得是计算机专家也能使用C语言。 20世纪90年代,许多软件公司开始改用C++来开发大型的编程项目。 C++在C语言的基础上嫁接了面向对象编程工具(面向对象编程是一门哲 学,它通过对语言建模来适应问题,而不是对问题建模以适应语言)。 C++几乎是C的超集,这意味着任何C程序差不多就是一个C++程序。学习C 语言,也相当于学习了许多C++的知识。
虽然这些年来C++和JAVA非常流行,但是C语言仍是软件业中的核心技 能。在最想具备的技能中,C语言通常位居前十。特别是,C 语言已成为嵌 入式系统编程的流行语言。也就是说,越来越多的汽车、照相机、DVD 播 放机和其他现代化设备的微处理器都用 C 语言进行编程。除此之外,C 语 言还从长期被FORTRAN独占的科学编程领域分得一杯羹。最终,作为开发 操作系统的卓越语言,C在Linux开发中扮演着极其重要的角色。因此,在进 入21世纪的第2个10年中,C语言仍然保持着强劲的势头。
C语言标准
目前,有许多C实现可用。在理想情况下,编写C程序时,假设该程序 中未使用机器特定的编程技术,那么它的运行情况在任何实现中都应该相 同。要在实践中做到这一点,不同的实现要遵循同一个标准。 C语言发展之初,并没有所谓的C标准。1987年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language(《C语言程序设计》)第1版是公认的C标准,通常称之为K&R C 或经典C。特别是,该书中的附录中的“C语言参考手册”已成为实现C的指导 标准。例如,编译器都声称提供完整的K&R实现。虽然这本书中的附录定 义了C语言,但却没有定义C库。与大多数语言不同的是,C语言比其他语言 更依赖库,因此需要一个标准库。实际上,由于缺乏官方标准,UNIX实现 提供的库已成为了标准库。
---ANSI C (C89标准):
随着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。
---C99标准:
1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发 布了C99标准。该委员会遵循了最初C90标准的原则,包括保持语言的精练 简单。委员会的用意不是在C语言中添加新特性,而是为了达到新的目标。 第1个目标是,支持国际化编程。例如,提供多种方法处理国际字符集。第2 个目标是,“调整现有实践致力于解决明显的缺陷”。因此,在遇到需要将C 移至64位处理器时,委员会根据现实生活中处理问题的经验来添加标准。第 3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性, 让C比FORTRAN更有竞争力。 这3点(国际化、弥补缺陷和提高计算的实用性)是主要的修订目标。 在其他方面的改变则更为保守,例如,尽量与C90、C++兼容,让语言在概 念上保持简单。用委员会的话说:“„„委员会很满意让C++成为大型、功能 强大的语言”。 C99的修订保留了C语言的精髓,C仍是一门简洁高效的语言。本书指出 了许多C99修改的地方。虽然该标准已发布了很长时间,但并非所有的编译 器都完全实现C99的所有改动。因此,你可能发现C99的一些改动在自己的 系统中不可用,或者只有改变编译器的设置才可用。
---C11标准:
2011年终于发布了C11标准。此次,委员会提出了一些新的指导原 则。出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。而且, 供应商并未像对C90那样很好地接受和支持C99。这使得C99的一些特性成为 C11的可选项。因为委员会认为,不应要求服务小型机市场的供应商支持其 目标环境中用不到的特性。另外需要强调的是,修订标准的原因不是因为原 标准不能用,而是需要跟进新的技术。例如,新标准添加了可选项支持当前 使用多处理器的计算机。对于C11标准,我们浅尝辄止。
编程的七个步骤
1.定义程序目标→2.设计程序→3.编写代码→4.编译→5.运行→6.调试→7.维护和修改
其中123是主要过程。
---定义程序目标
在动手写程序之前,要在脑中有清晰的思路。想要程序去做什么首先自 己要明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控 制,以及程序应该要报告什么信息。在这一步骤中,不涉及具体的计算机语 言,应该用一般术语来描述问题。
---设计程序
对程序应该完成什么任务有概念性的认识后,就应该考虑如何用程序来 完成它。例如,用户界面应该是怎样的?如何组织程序?目标用户是谁?准 备花多长时间来完成这个程序? 除此之外,还要决定在程序(还可能是辅助文件)中如何表示数据,以及用什么方法处理数据。学习C语言之初,遇到的问题都很简单,没什么可 选的。但是,随着要处理的情况越来越复杂,需要决策和考虑的方面也越来 越多。通常,选择一个合适的方式表示信息可以更容易地设计程序和处理数 据。 再次强调,应该用一般术语来描述问题,而不是用具体的代码。但是, 你的某些决策可能取决于语言的特性。例如,在数据表示方面,C的程序员 就比Pascal的程序员有更多选择。
---编写代码
设计好程序后,就可以编写代码来实现它。也就是说,把你设计的程序 翻译成 C语言。这里是真正需要使用C语言的地方。可以把思路写在纸上, 但是最终还是要把代码输入计算机。这个过程的机制取决于编程环境,我们 稍后会详细介绍一些常见的环境。一般而言,使用文本编辑器创建源代码文 件。该文件中内容就是你翻译的C语言代码
---编程说明
编程并非像描述那样是一个线性的过程。有时,要在不同的步骤之间往 复。例如,在写代码时发现之前的设计不切实际,或者想到了一个更好的解 决方案,或者等程序运行后,想改变原来的设计思路。对程序做文字注释为 今后的修改提供了方便。 许多初学者经常忽略第1步和第2步(定义程序目标和设计程序),直接跳到第3步(编写代码)。刚开始学习时,编写的程序非常简单,完全可以 在脑中构思好整个过程。即使写错了,也很容易发现。但是,随着编写的程 序越来越庞大、越来越复杂,动脑不动手可不行,而且程序中隐藏的错误也 越来越难找。最终,那些跳过前两个步骤的人往往浪费了更多的时间,因为 他们写出的程序难看、缺乏条理、让人难以理解。要编写的程序越大越复 杂,事先定义和设计程序环节的工作量就越大。 磨刀不误砍柴工,应该养成先规划再动手编写代码的好习惯,用纸和笔记录下程序的目标和设计框架。这样在编写代码的过程中会更加得心应手、 条理清晰。
目标代码、可执行文件和库
C编程的基本策略是,用程序把源代码文件转换为可执行文件(其中包 含可直接运行的机器语言代码)。典型的C实现通过编译和链接两个步骤来 完成这一过程。编译器把源代码转换成中间代码,链接器把中间代码和其他 代码合并,生成可执行文件。C 使用这种分而治之的方法方便对程序进行模 块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。通过 这种方式,如果只更改某个模块,不必因此重新编译其他模块。另外,链接 器还将你编写的程序和预编译的库代码合并。
中间文件有多种形式。我们在这里描述的是最普遍的一种形式,即把源 代码转换为机器语言代码,并把结果放在目标代码文件(或简称目标文件) 中(这里假设源代码只有一个文件)。虽然目标文件中包含机器语言代码, 但是并不能直接运行该文件。因为目标文件中储存的是编译器翻译的源代 码,这还不是一个完整的程序。
目标代码文件缺失启动代码(startup code)。启动代码充当着程序和操 作系统之间的接口。例如,可以在MS Windows或Linux系统下运行IBM PC兼 容机。这两种情况所使用的硬件相同,所以目标代码相同,但是Windows和 Linux所需的启动代码不同,因为这些系统处理程序的方式不同。
目标代码还缺少库函数。几乎所有的C程序都要使用C标准库中的函 数。例如,concrete.c中就使用了 printf()函数。目标代码文件并不包含该函 48 数的代码,它只包含了使用 printf()函数的指令。printf()函数真正的代码储存 在另一个被称为库的文件中。库文件中有许多函数的目标代码。 链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码 这 3 部分合并成一个文件,即可执行文件。对于库代码,链接器只会把程序 中要用到的库函数代码提取出来。
编译器和链接器集成开发环境(Windows)
许多供应商(包括微软、Embarcadero、Digital Mars)都提供Windows 下的集成开发环境,或称为IDE(目前,大多数IDE都是C和C++结合的编译 器)。可以免费下载的IDE有Microsoft Visual Studio Express和Pelles C。利用 集成开发环境可以快速开发C程序。关键是,这些IDE都内置了用于编写C程 序的编辑器。这类集成开发环境都提供了各种菜单(如,命名、保存源代码 文件、编译程序、运行程序等),用户不用离开IDE就能顺利编写、编译和 运行程序。如果编译器发现错误,会返回编辑器中,标出有错误的行号,并简单描述情况。
通常,Windows IDE既可处理C也可处理C++,因此要指定待处理的程序 是C还是C++。有些产品用项目类型来区分两者,有些产品(如,Microsoft Visual C++)用.c文件扩展名来指明使用C而不是C++。当然,大多数C程序 也可以作为C++程序运行。
你可能会遇到一个问题:在程序执行完毕后,执行程序的窗口立即 失。如果不希望出现这种情况,可以让程序暂停,直到按下Enter键,窗口 才消失。要实现这种效果,可以在程序的最后(return这行代码之前)添加 下面一行代码:
getchar();
该行读取一次键的按下,所以程序在用户按下Enter键之前会暂停。也有更好的办法
while(getchar()!='\n');
这行代码表示吸收换行符前所有的字符,直到按下回车键结束。
有时根据程序的需要,可能还需要一个击键等待。这种情况下,必须用两次 getchar():
getchar();
getchar();
例如,程序在最后提示用户输入体重。用户键入体重后,按下Enter键 以输入数据。程序将读取体重,第1个getchar()读取Enter键,第2个getchar() 会导致程序暂停,直至用户再次按下Enter键。
小结
C是强大而简洁的编程语言。它之所以流行,在于自身提供大量的实用 编程工具,能很好地控制硬件。而且,与大多数其他程序相比,C程序更容 易从一个系统移植到另一个系统。 C是编译型语言。C编译器和链接器是把C语言源代码转换成可执行代码 的程序。