初识C语言

笔者虽然没有从事计算机相关工作,但依然无法舍弃对编程的喜爱。通过发布文章,一方面,把重新学习的内容纪录下来,最重要的是,能够与大家分享所学与所困。不喜勿喷!

1. C语言起源

1972年,贝尔实验室的Dennis Ritch和Ken Thompson在开发UNIX操作系统时,设计了C语言。C语言设计的初衷是将其作为程序员使用的一种编程工具,其主要目标是成为有用的语言。

2. C语言特性

2.1 设计特性

C是一门流行的语言,融合了计算机科学理论和实践的控制特性。许多高校将它作为学习计算机编程的第一种语言。C语言的设计理念让用户能够轻松完成自顶向下的规划、结构化编程和模块化设计。因此,用C语言编写的程序更易懂、更可靠。

2.2 高效性

C语言具有通常是汇编语言才具有的微调控制能力,可以根据具体情况微调程序以获得最大运行速度或最有效地使用内存。

2.3 可移植性

所谓可移植性,是指在一种系统中编写的程序稍作修改(如更改主程序头文件中的少许项)或不修改就能在其他系统运行。由于有许多运行在不同系统上的C编译器,C语言成为可移植方面的佼佼者。但需要注意的是,程序中针对特殊硬件设备或操作系统特殊功能(如,Windows或Mac OS)编写的部分,通常是不可移植的。

2.4 强大且灵活

例如,

  1. UNIX操作系统,大部分是用C语言写的。UNIX通常会将C编译器作为软件包的一部分。
  2. 许多语言(如Perl、Python、LISP)的编译器和解释器都是用C语言编写的。
  3. C程序可以用于解决物理学和工程学的问题,甚至可用于制作电影的动画特效。

2.5 缺点

例如,

  1. 编程错误难以察觉。如,使用指针。
  2. 存在大量运算符,可能导致代码晦涩难懂。所以,只有C语言有年度混乱代码大赛(IOCCC,The International Obfuscated C Code Contest)。

3. C语言的应用范围

早在20世纪80年代,C语言就已经成为UNIX系统使用的主流语言。从那以后,C语言的应用范围扩大到PC(主要体现在操作系统与应用程序方面)和超级计算机。

虽说这些年来C++和Java非常流行,但是C语言仍然是软件行业中的核心技能。特别是,C语言已成为嵌入式系统编程的流行语言。越来越多的汽车、照相机、音响和其他现代化设备的微处理器都用C语言进行编程。

题外话:
人工智能的热潮,让C/C++、Java、Python成为最热门的三个语言。据说,Python已经被计划纳入高考内容。
不过,可以肯定的是,学好C语言肯定木有坏处。2017年12月TIOBE排行榜,Java、C、C++、Python、C#分别排名前五。2017年,人工智能大热,C语言有希望成为年度最佳“候选人”。

4. C语言标准

  • 1989年,第一套C语言标准,由美国国家标准协会(ANSI)发布,称为ANSI C。它定义了C语言和C标准库。

  • 1990年,国际标准化组织(ISO)采用 ANSI C,称之为ISO C,与 ANSI C 完全相同。通常,ANSI/ISO C 被称为C89C90(因分别在1989年和1990年发布)。

  • 1999年,发布C99。旨在达到三个目标。第一,支持国际化变成。例如,提供多种方法处理国际字符集。第二,“调整现有实践致力于解决明显的缺陷”,以适应64位处理器。第三,适应科学和工程项目的关键数值计算。这使C比FORTRANFORTRAN更具竞争力。

  • 2011年,发布C11。C11并没有完全接受和支持C99,而是使C99的一些特性,成为C11的可选项。《C Primer Plus(第六版)》一书,对于C11标准,浅尝辄止。

对于C语言标准,有机会再详细学习、总结。

5. 使用C语言的7个步骤

5.1 第一步:需求分析

这个步骤要求对程序有清晰的思路。首先明确,要做什么,需要哪些信息,要进行哪些计算和控制,要反馈哪些结果。

在这个步骤中,不涉及计算机语言,应该用术语来描述。

5.2 第二步:详细设计

这个步骤,要考虑如何用程序实现需求。例如,用户界面应该怎么样?目标用户是哪些?程序架构应该怎么样?计划多长时间实现这个程序?如何表示数据?用什么方法处理数据?

这个步骤涉及的内容,有专门的术语和描述工具。可参考软件工程相关书籍。

5.3 第三步:编写代码

这个步骤,才是真正用到计算机语言的地方,也就是把你设计的程序,翻译成C语言。

5.4 第四步:编译

编译器,是把源代码转换成可执行代码的程序。可执行代码是用机器语言表示的代码。C编译器除了把C代码翻译成特定的机器语言,还将源代码与C库的代码合并成最终的程序。(更准确地说,应该是又链接器来链接函数库。但是大部分系统中,编译器运行链接器)。最终,生成一个用户可以运行的可执行文件。

编译器与链接器

此外,编译器还会检查C语言程序是否有效。如果发现错误,就无法生成可执行文件并报错。理解特定编译器报告的错误或警告信息,是程序员必须要掌握的技能。

5.5 运行程序

虽然,在Windows命令提示符模式、UNIX终端模式和Linux终端模式下,可以运行程序。但是,现在更为使用的,是在IDE(Intergrated Development Environment,集成开发环境)中,编辑、编译、执行C程序。

5.6 测试、调试程序

测试,分为黑盒测试和白盒测试。黑盒测试,一般就是直接通过运行程序,看其是否能够实现预期的功能。白盒测试,能够更深层次检测程序所包含的问题,对技术水平要求较高。

查找并修复程序的过程叫调试。会遇到各种形态的BUG(八阿哥)。随着一步步的学习,可能犯错误的地方会越来越多,不经意间的小问题,就能导致程序的崩溃。

所以,要养成良好的编程习惯,能够提高代码的可读性和可维护性。

5.7 维护、修改代码

这一步,通常是被忽视的。程序能够运行,但不意味着就是完美的。随着时间推移或者运营环境的改变,问题会又更好的解决方案,程序会需要更多的功能。也许,维护、修改代码的工作量远远超出前面的步骤。

本文同步发布在SegmentFault。如果不足之处,还请指出。

参考书籍:

  1. 《C Primer Plus(第六版)》,Stephen Prata 著,姜佑 译

你可能感兴趣的:(初识C语言)