这个宏定义的含义是什么?

9

我读了这段宏(C代码),但是在解码时不太理解它定义的是什么。它定义了什么?

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

-AD


很难说。你能提供一个使用它的例子吗? - Hans W
3个回答

12

我认为sram的意思是"随机存取存储器的起始位置"。


unsigned char[1]

一个大小为1的无符号字符数组。
unsigned char(*)[1]

一个大小为1的无符号字符数组指针

(unsigned char (*)[1]) 0

将0转换为一个大小为1的无符号字符数组的指针。
*((unsigned char (*)[1]) 0)

读取位置0处的一些内存,并将结果解释为一个大小为1的无符号字符数组。

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

只是为了避免 1+5*8+1==42

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

将变量sram定义为从位置0开始的内存,并将结果解释为大小为1的无符号字符数组。


+1 是因为你给出了《银河系漫游指南》五部曲中那个难题的解释。哦,我猜你的其他回答也还不错。 - Platinum Azure
或者在嵌入式系统中,它可能只是指“SRAM”(静态随机存取存储器),这通常是微控制器芯片上的RAM所使用的。 - Clifford

1

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


1

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

具体来说,它将0强制转换为指向无符号字符数组的指针,并通过该指针间接访问(留下一个无符号字符数组)。

类似的结果可以通过以下方式获得

#define sram ((unsigned char*)0)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接