C macro确保元素在struct的开头

J V*_*J V 5 c macros struct

有没有办法设计一个宏,可以确保元素在定义期间处于结构的开头?例如:

typedef struct {
  START(int a);
} b;
// Becomes
typedef struct {
  int a;
} b;
Run Code Online (Sandbox Code Playgroud)

但是当它不是第一个元素时会生成编译时错误?

typedef struct {
  int c;
  START(int a);
} b;
// Generate an error
Run Code Online (Sandbox Code Playgroud)

我原以为你可以使用OFFSETOFBUILD_BUG_ON_ZERO宏的组合,但这需要在初始化时知道​​结构布局,并因为变量未声明而产生错误.

这可能在C?

Dwa*_*ell 4

在您实际采用该布局的位置(而不是在定义站点)使用编译时断言。当然,您需要在开始时实际定义它才能通过断言。