我正在学习 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)
呢?宏是如何工作的?