C诡异离奇,缺陷重重,却获得了巨大的成功——Dennis Ritchie
1.C语言的史前阶段
C语言的产生竟然源于一个失败的项目,1969年——Multics工程。
编译器设计者的金科玉律:效率(几乎)就是一切。编译器的效率包括两个方面:运行效率(代码的运行速度)和编译速度(产生可执行代码的速度)。除了一些开发和学习环境之外,运行效率起决定性作用。
2.C语言的早期体验
根据编译器设计者的思路而发展形成的语言特性:1)数组下标从0而不是1开始;2)C语言的基本数据类型直接与底层硬件相对应;3)auto关键字显然是摆设;4)表达式中的数组名可以看作是指针;5)float被自动扩展为double;6)不允许嵌套函数(函数内部包含另一个函数的定义);7)register关键字。
3.标准I/O库和C预处理器
字符串替换,头文件包含,通用代码模板的扩展。
4.K&R C
1978年,C语言经典名著The C Programming Language出版,这个版本的C语言被称为"K&R C"。
5.今日之ANSI C
1989年12月,C语言标准草案最终被ANSI委员接纳。
6.它很棒,但它符合标准吗
不可移植的代码:由编译器定义的;未确定的;
坏代码:未定义的;约束条件;
可移植的代码:严格遵循标准的1)只使用已确定的特性;2)不突破任何编译器实现的限制;3)不产生任何依赖由编译器定义的或未确定的或未定义的特性的输出。
7.编译限制
每个ANSI C编译器必须能够支持:
1)在函数定义中形参数量的上限至少可以到达31个;
2)在函数调用时实参数量的上限至少可以到达31个;
3)在源代码行里至少可以有509个字符;
4)在表达式中至少可以支持32层嵌套的括号;
5)long int的最大值不得小于2 147 483 647(long int不低于32位);
8.ANSI C标准的结构
语法标准,介绍,环境,语法,描述,约束条件,语义。
9.阅读ANSI C标准,寻找乐趣和裨益
从源代码中发现更深层、更底层的原理。