c - 这个宏定义了什么?

标签 c macros

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

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

-广告

最佳答案

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


unsigned char[1]

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

unsigned char(*)[1]

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

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

关于c - 这个宏定义了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2320527/

相关文章:

c - 是否有推荐的方法将标题与 C 中的数据输出对齐?

c - C语言如何实现后期绑定(bind)?

c - 将函数转换为宏后宏调用问题

c - 带有新参数的宏

Typescript 随处只读切换? (功能参数)

macros - 有没有一种简单的方法可以查看 Elixir 宏扩展到的内容?

c++ - 在动态分配的结构中使用 std::string 时出现段错误

计数 C 指令

不使用库函数将 long 转换为 char 数组

clojure - 如何在线程 (->) 宏中键入提示?