C宏确保元素位于结构体的开始



是否有一种方法来设计一个宏,可以确保一个元素是在一个结构体的定义开始?例如:

typedef struct {
  START(int a);
} b;
// Becomes
typedef struct {
  int a;
} b;

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

typedef struct {
  int c;
  START(int a);
} b;
// Generate an error

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

这在C中可能吗?

在实际假定该布局的位置使用编译时断言,而不是在定义站点。当然,为了传递断言,您需要在开始时实际定义它。

也许像这样的东西会为您工作:

#define typedef_header(x) typedef struct { x
typedef_header(int a);
  int c;
} b;
int main()
{
  b x;
}

最新更新