是否有一种方法来设计一个宏,可以确保一个元素是在一个结构体的定义开始?例如:
typedef struct {
START(int a);
} b;
// Becomes
typedef struct {
int a;
} b;
但是当它不是第一个元素时产生编译时错误?
typedef struct {
int c;
START(int a);
} b;
// Generate an error
我认为你可以使用OFFSETOF
和BUILD_BUG_ON_ZERO
宏的组合,但这需要在初始化时知道结构布局,并产生错误,因为变量未声明。
这在C中可能吗?
在实际假定该布局的位置使用编译时断言,而不是在定义站点。当然,为了传递断言,您需要在开始时实际定义它。
也许像这样的东西会为您工作:
#define typedef_header(x) typedef struct { x
typedef_header(int a);
int c;
} b;
int main()
{
b x;
}