本章提到了第二章所说的判断声明时实际类型的方法实际上是C语言设计的哲学之一
然后出现了一种C语言设计哲学,要求对象的声明形式与它的使用形式尽可能相似。一个int类型的指针数组被声明为
int *p[3]
,并以*p[i]
这样的表达式引用或者使用指针所指向的int数据,所以它的声明形式和使用形式非常相似。但是这种哲学从实践上来说并不是十分正确。毕竟使用和声明还是两种完全不同的东西,强行让这两者相同会导致声明的时候无法按照从左到右的自然阅读顺序来理解声明的类型。同时限定符const
的加入让事情变得更加复杂奇技淫巧
1
2
3
4union bits32_tag {
int whole; /* 一个32位的值 */
struct { char c0, c1, c2, c3;} byte; /* 4个8位的字节 */
}通过使用联合使得我们可以提取整个32位的值(作为int),同时也可以单独的提取某一个字节段
不要在struct类型中使用typedef而使得结构体变量声明的时候省去了struct关键字,这样省略struct关键字的好处并不明显。typedef关键字应该用在
- 数组,结构,指针以及函数的组合类型
- 可移植类型。比如需要选择一种至少20比特的类型时,可以对他进行typedef操作,当之后移植到不同的平台的时候,就可以只更改typedef这一处地方
本章最主要的内容就是教我们如何判断复杂的声明类型/typedef类型等等,原文写的很清楚。建议直接看原文,这里不再细说,具体可以看以下几张图