2010-02-23 44 views
9

我讀了這段宏(C代碼),並對其進行解碼時感到困惑,以便知道它的定義。它定義了什麼?這個宏定義了什麼?

#define sram (*((unsigned char (*)[1]) 0)) 

〜AD

+0

很難說。你能提供一個如何使用它的例子嗎? – 2010-02-23 18:04:25

回答

12

我覺得sram意爲 「RAM開始」。


unsigned char[1] 

無符號字符的尺寸1的數組。

unsigned char(*)[1] 

A pointer to an array大小爲1的無符號字符。

(unsigned char (*)[1]) 0 

將0轉換爲無符號字符大小爲1的數組的指針。

*((unsigned char (*)[1]) 0) 

讀取位置0處的一些內存,並將結果解釋爲無符號字符大小爲1的數組。

(*((unsigned char (*)[1]) 0)) 

只是到avoid 1+5*8+1==42

#define sram (*((unsigned char (*)[1]) 0)) 

定義變量sram起始於位置0的存儲器,並解釋該結果作爲無符號字符的尺寸1的陣列。

+0

+1,爲我提供了一個關於「漫遊指南」五部曲三部曲難題的解釋。哦,我猜你的答案也可以。 – 2010-02-23 18:24:54

+0

或者在嵌入式系統上,它可能意味着「SRAM」(靜態隨機存取存儲器),它通常是由微控制器的片上RAM構成的。 – Clifford 2010-02-23 18:40:22

1

認爲它返回的內存(RAM)的基地址(0):)

1

它將「sram」定義爲指向從零開始的內存的指針。你可以通過指針訪問內存,例如sram [0]是地址零,sram [1]是地址1處的東西,等等。

具體來說,它將cast 0指向無符號字符數組的指針,並通過該指針間接無符號字符)。

類似的結果可以通過

#define sram ((unsigned char*)0) 

獲得它也是標準C完全不確定的,但是,這並不使用它,並有天使飛出自己的肚臍的阻止人們。

+0

+1 - 現在我知道天使從何而來。 – 2010-02-23 18:10:33