【发布时间】:2010-02-23 18:01:27
【问题描述】:
我读了这段宏(C 代码)并且在解码它以知道它定义什么时感到困惑。它定义了什么?
#define sram (*((unsigned char (*)[1]) 0))
-AD
【问题讨论】:
-
很难说。你能提供一个如何使用它的例子吗?
我读了这段宏(C 代码)并且在解码它以知道它定义什么时感到困惑。它定义了什么?
#define sram (*((unsigned char (*)[1]) 0))
-AD
【问题讨论】:
我认为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))
#define sram (*((unsigned char (*)[1]) 0))
将变量sram 定义到从位置0 开始的内存中,并将结果解释为大小为1 的无符号字符数组。
【讨论】:
我认为它正在返回内存 (RAM) 的基地址 (0) :)
【讨论】:
它将“sram”定义为从零开始的指向内存的指针。您可以通过指针访问内存,例如sram[0] 是地址 0,sram[1] 是地址 1 的东西,等等。
具体来说,它将 0 转换为指向 unsigned char 数组的指针并间接通过该数组(留下 unsigned char 数组)。
类似的结果可以通过
#define sram ((unsigned char*)0)
它在标准 C 中也是完全未定义的,但这并不能阻止人们使用它并让天使飞出他们的肚脐。
【讨论】: