c - sizeof 运算符的实现

标签 c linux gcc sizeof typecast-operator

我尝试过实现 sizeof 运算符。我是这样做的:

#define my_sizeof(x) ((&x + 1) - &x)

但对于任何一种数据类型,它总是以“1”结束。

然后我用谷歌搜索了一下,我找到了下面的代码:

#define my_size(x) ((char *)(&x + 1) - (char *)&x)

如果代码被类型转换,代码就可以工作,我不明白为什么。这段代码也完美地填充了一个结构。

它也适用于:

#define my_sizeof(x) (unsigned int)(&x + 1) - (unsigned int)(&x)

任何人都可以解释一下如果类型转换它是如何工作的吗?

最佳答案

指针相减的结果在元素中,而不是在字节中。因此,根据定义,第一个表达式的计算结果为 1

除此之外,您真的应该在宏中使用圆括号:

#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)

否则尝试在表达式中使用 my_sizeof() 会导致错误。

关于c - sizeof 运算符的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171117/

相关文章:

linux - 列出 ld 链接器可用的所有符号

c - C 中的 static 关键字和外部变量

c++ - 检测是否同时按下 2 个键

c - 在 SPI STM32 中读取 Rx 缓冲区的问题

linux - 如何在Linux中使用zip递归压缩所有txt文件?

c++ - gcc 抑制警告 "too small to hold all values of"

c - 可加载内核模块编程和系统调用拦截

linux - Redhat Enterprise Linux 6 多播提要

c - 不建议在 fork 时执行外部程序

linux - 不支持配置 arm-unknown-elf - ARM 工具链