这个宏定义了什么?

时间:2010-02-23 18:01:28

标签: c macros

我读了这段宏(C代码)并且在解码它时很困惑,知道它定义了什么。它定义了什么?

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

-AD

3 个答案:

答案 0 :(得分:12)

我认为sram的意思是“RAM的开始”。


unsigned char[1]

大小为1的无符号字符数组。

unsigned char(*)[1]

大小为1的pointer to an array无符号字符。

(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的无符号字符数组。

答案 1 :(得分:1)

认为它返回内存(RAM)的基地址(0):)

答案 2 :(得分:1)

它将“sram”定义为从零开始的内存指针。您可以通过指针访问内存,例如sram [0]是地址0,sram [1]是地址1的东西,等等。

具体来说,它是0,它是一个指向unsigned char数组的指针,并通过它间接传递(留下一个unsigned char数组)。

可以通过

获得类似的结果
#define sram ((unsigned char*)0)

它在标准C中也是完全未定义的,但这并不能阻止人们使用它并让天使飞出他们的肚脐。