【问题标题】:What does this macro define?这个宏定义了什么?
【发布时间】:2010-02-23 18:01:27
【问题描述】:

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

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

-AD

【问题讨论】:

  • 很难说。你能提供一个如何使用它的例子吗?

标签: c macros


【解决方案1】:

我认为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 为我在《Hitchhiker's Guide》五部分三部曲中的这个难题提供了解释。哦,我猜你的其他答案也不错。
  • 或者在嵌入式系统上,它可能只是表示“SRAM”(静态随机存取存储器),它通常是微控制器的片上 RAM 的组成部分。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    具体来说,它将 0 转换为指向 unsigned char 数组的指针并间接通过该数组(留下 unsigned char 数组)。

    类似的结果可以通过

    #define sram ((unsigned char*)0)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2011-08-05
      • 2020-03-03
      • 2015-12-18
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多