我已经开始阅读Unix v6上的狮子会评论。我遇到了这些我从未见过的C语言片断。作者确实提供了某种解释,但有人可以向我解释这里发生了什么?C中的匿名结构在Unix内核中找到
params.h
:
SW 0177570
......
struct { int integ; };
和由作者
SW
在unix/prf.c
if(SW->integ == 0)
说明此使用的作为值前所定义 0177570.这是内核地址的 只读处理器寄存器,用于存储控制台切换寄存器的 设置。 该声明的含义是明确的:获取位置0177570处的 内容并查看它们是否为 为零。问题是在 C中表示这个。代码
if (SW == 0)
不会传达这个意思。很明显,SW
是一个指针值,应该是 解除引用。编译器可能已被 更改为接受if (SW-> == 0)
但按照现状,这在语法上不正确。通过发明一个虚拟结构, 一个元素integ
,程序员找到了一个令人满意的解决方案,他的问题是 。
我的问题主要是如何工作?当编译器看到SW->integ
时,它如何将SW
与匿名结构关联?
在现代C中,我们使用'int * const SW = 0177570;'但是在优化器出现之前,这会让Ken和他的成本花费两个字节:) – 2010-10-07 11:42:01