我已經開始閱讀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