思维导图:
1.3 C语言的发展及其特点
C语言,作为过去几十年来最为广泛使用的编程语言之一,其历史悠久且富有成效。本文将概述C语言的发展历程以及其显著特点,为读者提供一个关于这种强大语言的基本理解。
C语言的发展历程
初期发展
1972年,美国贝尔实验室的Dennis M. Ritchie在B语言的基础上设计出了C语言。最初,C语言主要是为了描述和实现UNIX操作系统而设计的。1973年,Ken Thompson和Dennis M. Ritchie合作,将UNIX的绝大多数部分用C语言重写,推出了UNIX的第五版,标志着C语言在UNIX操作系统中的核心地位。
广泛推广
随着UNIX操作系统的广泛使用,C语言也得到了快速推广。1978年,Brian W. Kernighan和Dennis M. Ritchie合著的《The C Programming Language》一书的出版,更是将C语言推向了全世界。该书中介绍的C语言版本,成为了后续广泛使用的C语言标准的基础。
标准化
1983年,美国国家标准协会(ANSI)开始制定C语言的标准,1989年发布了ANSI C标准,随后1990年国际标准化组织(ISO)接受了这一标准。1999年,ISO对C语言标准进行了修订,发布了C99标准,增加了一些新功能。尽管不同的编译器实现了不同程度的C99功能,C语言的核心已经非常稳定。
C语言的主要特点(课后习题第二题考察了这里)
简洁和灵活
C语言以其简洁和灵活性著称。它只包含37个关键字和9种控制语句,使得C程序相较于其他高级语言更加紧凑和高效。
丰富的运算符
C语言拥有广泛的运算符,支持多样化的表达式类型,这使得C语言具有强大的表达能力和高效的运算性能。
多样的数据类型
C语言提供了丰富的数据类型,包括基本类型(整型、浮点型、字符型)和复杂类型(数组、指针、结构体等),满足了不同编程需求。
结构化控制语句
C语言支持结构化的控制语句和模块化的程序设计,有助于提高程序的可读性和可维护性。
直接访问硬件资源
C语言允许直接访问物理地址和进行位操作,使得C语言既适用于应用软件的开发,也适用于系统软件的开发。
高可移植性
C语言的编译系统简洁,易于在不同的计算机系统间移植,使得用C语言编写的程序具有良好的可移植性。
2024/6/19补充
漏洞:在做C primer plus的课后习题1.时问到了可移植性发现的对此其实我并不了解,同时也暴露了本人的一个漏洞。
我的看法:
对于大一新生初学者而言,其实提这个可移植性其实大一新生并没有什么概念,更别说高可移植性,因为大一新生到现在如果高中没学过除了windows的操作系统比如Linux其实根本对此没有任何概念想象都想象不出来了,学生怎么不犯困呢?那究竟什么是可移植性呢?C primer plus比起红书而言就更加具体,例子更与时俱进了。
高效的执行性能
C语言编写的程序在执行时具有高效的性能,这是因为C语言接近底层,能够有效地利用硬件资源。
2024/6/19补充
疑问1:
你是否和我一样有疑问,所谓的接近底层是什么意思?底层又是什么意思,这些术语其实对于刚入学的大一新生来说其实很迷惑的,因为他们还不了解计算机的组成和习题结构这是计算机两门专业核心课,我也是学了这两门课才逐步有些了解底层什么意思。
解答:
底层(Low-Level)
在计算机科学中,“底层”通常指的是与计算机硬件直接交互的层级。底层编程语言和操作系统功能直接操纵硬件资源,如内存、CPU寄存器和输入输出设备。
接近底层(Low-Level)
“接近底层”是指编程语言或系统操作离硬件层面比较近,能够直接或几乎直接控制硬件资源。这类语言通常提供更细粒度的控制和优化,但也要求程序员有更多的硬件知识和更细致的管理。
为什么C语言接近底层?
-
指针和内存管理:
- C语言允许直接操作内存地址,通过指针(pointers)来进行内存读写。这种能力使得C程序可以非常高效地管理内存,但也需要程序员小心避免错误,如内存泄漏和指针越界。
-
汇编语言的嵌入:
- C语言支持嵌入汇编代码,使得程序员可以在需要时直接写出高效的汇编代码来优化特定操作。
-
无抽象的直接操作:
- C语言没有像高级语言那样提供过多的抽象层次,比如垃圾回收、复杂的运行时库等。程序员需要手动管理内存和资源,这虽然增加了复杂性,但也提供了更多的控制权。
底层和接近底层的好处和挑战
好处:
- 高效性:由于减少了抽象层,C语言编写的程序通常比使用高级语言编写的程序更高效。
- 精细控制:程序员可以精确控制硬件资源的使用,这对于性能优化和特定硬件操作是必要的。
挑战:
- 复杂性:需要更深的硬件知识和更细致的编程技巧,容易出错。
- 调试难度大:由于缺乏高级语言的抽象和安全检查,调试底层代码可能更加困难。
对于新生的建议
作为计算机科学的新生,了解这些概念可能需要时间和实践。建议从以下几个方面入手:
-
学习计算机组成原理:
- 了解基本的计算机硬件结构,如CPU、内存、存储设备等,理解它们如何协同工作。
-
实践编程:
- 多写C语言代码,特别是涉及指针和内存管理的程序,逐步掌握底层编程的技巧。
-
参考教材和资源:
- 使用推荐的教材,如《计算机系统概论》、《计算机组成与设计》,以及在线课程和资料,系统地学习底层相关知识。
这个在谭浩强的C程序设计红皮书中并没有详细的说明,我在看到C primer plus的时候看到了更加详细的说法
这里有新出现了一个名词叫做微调控制能力和汇编语言
疑问2:这两个名词是什么意思
汇编语言读者可以看看我的博客专栏会持续更新传送门: 程序猿之汇编语言
总结
自从20世纪70年代问世以来,C语言凭借其强大的功能、灵活的使用方式和高效的执行性能,成为了世界上应用最广泛的高级编程语言之一。无论是操作系统的开发,还是应用软件和系统软件的编写,C语言都扮演着不可或缺的角色。对于希望深入了解计算机工作原理和提高编程技能的人来说,学习C语言是一个非常重要的步骤。