代码之家  ›  专栏  ›  技术社区  ›  goldenmean

这个宏定义了什么?

  •  9
  • goldenmean  · 技术社区  · 15 年前

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

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

    -广告

    3 回复  |  直到 15 年前
        1
  •  12
  •   Community CDub    7 年前

    我想 sram 表示“RAM启动”。


    unsigned char[1]
    

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

    unsigned char(*)[1]
    

    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))
    

    定义变量 静态随机存取存储器 从位置0开始的内存,并将结果解释为大小为1的无符号字符数组。

        2
  •  1
  •   John Weldon user3678248    15 年前

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

        3
  •  1
  •   Richard Pennington    15 年前

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

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

    类似的结果可以通过

    #define sram ((unsigned char*)0)
    

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