我正在学习 c99,在阅读了有关结构后,我在Linux 内核代码中发现了以下宏:
#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. 我用1, 2, +1,和and替换了它-1,它总是有效的。+999'a'"hello"
源中没有评论。我知道这->是用来通过指针访问结构成员的,但是指针怎么可能((struct book*)0)呢?宏是如何工作的?