C语言
小布丁的读书笔记
知其然也要知其所以然
展开
-
[C专家]分析C语言声明——只有编译器才会喜欢的语法
Kernighan和Ritchie成人,“C语言声明的语法有时会带来严重的问题。”(K&R,第二版,第122页)。C语言声明的语法对于编译器(或编译器设计者)的处理来说并不是什么大不了的事。但对于一般的程序员,它却会成为障碍。语言的设计者也是人,他们也会犯错误。例如,Ada的语言参考手册在最后的附录中所附的Ada语法手册,有一处存在歧义。对于编程语言的语法来说,歧义是非常忌讳的,因为它使编译器设计转载 2017-08-09 22:31:13 · 518 阅读 · 1 评论 -
[C专家]分析C语言声明——声明是如何形成的[1]
让我们先来看一些C语言的术语以及一些能组合成一个声明的单独语法成分。其中一个非常重要的成分就是声明器(declarator)——它是所有声明的核心。简单地说,声明器就是标识符以及与它组合在一起的任何指针、函数括号、数组下标等,如下表所示。为了方便起见,我们把初始化内容(initializer)也放到里面,并分类表示。声明器注:上表中* const volatile、* volati转载 2017-08-12 19:38:37 · 429 阅读 · 0 评论 -
[C专家]分析C语言声明—— 关于结构体
结构体就是一种把一些数据项组合在一起的数据结构。其他编程语言把它称为记录。结构体的语法很容易记忆:在C语言中,进行组合的通常方法就是把需要组合的东西放在花括号里面:{内容……}。关键字struct放在左括号前面,以便编译器能够从程序块中认出它: struct {内容……} 结构体内容可以是任何其他数据声明:单个数据项、数组、其他结构、指针等。我们可以在结构体的定义后面跟一些变量名,表示这些变量的转载 2017-08-20 23:01:20 · 608 阅读 · 0 评论 -
[C专家]分析C语言声明——关于联合
联合(union)在许多其他语言中被称作变体记录(variant record)。它的外表与结构相似,但在内存布局上存在关键性的区别。在结构中,每个成员依次存储,而在联合中,所有的成员都从偏移地址零开始存储。这样,每个成员的位置都是重叠在一起:在某一时刻,只有一个成员真正存储于该地址。联合既有一些优点,也有一些缺点。它的缺点就是那些所谓的优点其实并不怎么出色。联合的优点是它的外观同结构一样,只转载 2017-09-06 18:12:36 · 301 阅读 · 0 评论 -
[C专家]分析C语言声明——关于枚举
枚举(enum)通过一种简单的途径,把一串名字与一串整型值联系在一起。对于像C这样的弱类型语言而言,很少有什么事只能靠枚举来完成而用#define不能解决的。所以,在大多数早期的K&R C编译器中,都省掉了枚举。但是枚举在其它大多数语言中都存在,所以C语言最终也实现了它。现在,对于枚举的一般形式,你应该已经相当熟练了:enum 可选标签 {内容...}可选变量定义;其中的“内容”是一些标识转载 2017-09-06 18:28:27 · 505 阅读 · 0 评论