《C Primer Plus》- 第一章 初试C语言

本笔记写于2020年1月25日。

从今天开始,我要全面的、彻底的将未来计划中所有的知识重新规划学习一遍,并整理成一套全面的笔记体系。为我将来的职业打下坚实的基础。

而所有的一切从C语言开始。本系列文章参考的是《C Primer Plus》(第六版),但不完全是第六版的内容,里面会有笔者自己的相关补充。

PS:如果笔记中有任何的错误,请在下方评论中留言,我会及时回复并修改

C语言简介

1972年,贝尔实验室的Dennis RitchKen Thompson两人在开发Unix操作系统时设计了C语言。

C语言发明已有近50年的时间了,但它仍然是计算机行业中最重要、最流行的编程语言之一。虽然有很多人都从C语言转而使用其他编程语言,但C语言仍然凭借其自身实力在众多编程语言中有着极高的地位。

C语言特性

优点

  • 强大的设计特性:自顶向下的规划、结构化编程和模块化设计

  • 高效性:C语言是现今执行速度最快的编程语言之一

  • 可移植性:在一种系统中编写的C程序稍作修改或不修改就能在其他系统运行。

    笔者补充:C语言的可移植性与Java不同,Java由于JRE的存在,因此是“一次编译,到处运行”。而C语言的可移植性主要是针对C代码来说的。C语言是现今操作系统的主流语言,因此各大操作系统中都内置了C语言编译器。同时,C语言在业内有着一套全面的标准,因此,C代码可以在各个机器上都可以编译运行,但如果在代码中使用了操作系统提供的特定API,C语言便不存在可移植性了

  • 功能强大:不用说

  • 灵活度高:指针的存在为程序员直接操作内存提供了工具

缺点

  • 危险性高:指针的强大既是C语言的强大之处,也是C语言的危险之处
  • 开发周期长:面对现如今繁杂的世界,C语言面向过程的特性使得其开发周期过长

高级计算机语言和编译器

现代计算机由多个部件构成。其中,CPU作为运算部件,通过执行存储器中的指令来完成相应的功能。而指令是存储在内存中的一串由0和1组成的二进制数字,CPU通过解析这串01数串来完成相应的操作,这串01数串就是机器语言。指令的集合便是CPU对应的指令集。

由于01数串非常难以记忆和阅读,人们发明了一些助记符来辅助记忆这些数串,例如:定义数串010000的含义为加,其对应的助记符为add,这些助记符便是汇编语言。

汇编语言的发明提高了程序的可阅读性,但并不符合人类的思维方式,因此人们发明了高级编程语言。高级编程语言在汇编语言的基础上提供了更高一级的抽象,使其更加符合人类的思维方式,例如:进行两数相加操作,可以直接写成sum = a + b,极大的提高了编程效率。

但是,高级编程语言是计算机无法直接理解的,计算机能直接理解的只有机器语言,因此需要将高级编程语言转化为机器语言,这种转化便是通过编译器完成的。同时,编译器还有一个优点,在最初机器语言设计时,由于没有一个共同的标准,各大CPU制造商使用的指令集是不同的,使用编译器可以将一种高级语言程序转换成不同指令集的机器语言,使得高级语言不受特定CPU或指令集的限制。

语言标准

K&R C或标准C

1978年,Brian Kernighan和Dennis Ritchie两个合著了The C Programming Language(第一版),本书中阐述的C语言被称为K&R C标准C但本书并没有定义C语言的标准库

C89/C90

随着C语言的不断发展,C社区越来越希望有一个全面、严格的标准,因此,美国国家标准协会(ANSI)于1983年组建了一个委员会,开始制定C语言新的标准,并于1989年发布。同时,国际标准化组织(ISO)于1990年决定采用这套标准。这套标准定义了C语言和C标准库。

PS:实际上常见说的包括C89、C90、ANSI C和ISO C这4个名词都指的是同一套标准

C99

ANSI/ISO联合委员会于1994年开始制定新一套的C语言标准,并最终于1999年发布了C99标准。该标准的发布使得C语言更好符合时代的发展,C99标准也成为了目前使用最广泛的C语言标准。

C11和C17

C11标准于2011年12月8日发布,增添了部分新特性并提高了对C++的兼容性。C17标准于2018年提出,因此也有人称为C18标准,该标准中并没有引入新的特性,只是对C11标准进行了一定的修补

编程机制

C语言编译流程

猜你喜欢

转载自www.cnblogs.com/ChenGuangW/p/12235019.html