gpt4 book ai didi

c - Linux内核FIELD_SIZEOF宏解释

转载 作者:可可西里 更新时间:2023-11-01 11:43:26 29 4
gpt4 key购买 nike

我正在学习 c99,在阅读结构之后,我在 Linux Kernel code 中找到了以下宏:

#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))

我..什么?用法:

#include <stdio.h>
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))

struct book {
char title[100];
char author[100];
};

int main(void)
{
printf("%lu\n", FIELD_SIZEOF(struct book, title)); // prints 100
}

这是扩展 (gcc -E)

printf("%lu\n", (sizeof(((struct book*)0)->title)));

真正让我困惑的是 0。我将其替换为 12+1-1+999'a'"hello"它总是有效

来源中没有评论。我知道 -> 用于通过指针访问结构成员,但是 ((struct book*)0) 怎么可能是指针呢?宏是如何工作的?

最佳答案

这里的关键是sizeof是编译器在编译时计算出来的。因此,您指定的指针实际上从未被取消引用。毕竟,对象所在的位置不会改变其大小。 sizeof 运算符将纯粹根据类型评估其操作数。

因此,您使用的地址实际上无关紧要,但0 (NULL) 是一个常见的选择。

关于c - Linux内核FIELD_SIZEOF宏解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19435004/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com