相关疑难解决方法(0)

如何在编译时打印结构成员的偏移量?

给定一个结构体,例如:

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- 在编译时对偏移量进行二进制搜索,但我的实际结构很大,这可能会有点麻烦。

c gcc

25
推荐指数
3
解决办法
3407
查看次数

标签 统计

c ×1

gcc ×1