给定一个结构体,例如:
struct A {
char a;
char b;
} __attribute__((packed));
Run Code Online (Sandbox Code Playgroud)
我希望在编译时打印结构中的偏移量b(在本例中为 1) - 我不想运行程序并调用类似的内容,printf("%zu", offsetof(struct A, b));因为打印在我的平台上并不简单。我希望编译器本身打印偏移量,例如:
> gcc main.c
The offset of b is 1
Run Code Online (Sandbox Code Playgroud)
我尝试了几种使用#pragma messageand的方法offsetof,其中最接近的是:
#define OFFSET offsetof(struct A, b)
#define XSTR(x) STR(x)
#define STR(x) #x
#pragma message "Offset: " XSTR(OFFSET)
Run Code Online (Sandbox Code Playgroud)
它只打印:
> gcc main.c
main.c:12:9: note: #pragma message: Offset: __builtin_offsetof (struct A, b)
Run Code Online (Sandbox Code Playgroud)
它不打印数字偏移量。可以使用_Static_assert- 在编译时对偏移量进行二进制搜索,但我的实际结构很大,这可能会有点麻烦。