我有
struct foo {
int var;
}
和foo的静态声明
static const struct foo bar = {
.var = 8;
};
我想做的是
#define sizeit(_struct) .var = sizeof(struct _struct)
这样我才能做到
static const struct foo bar = {
sizeit(foo)
};
但我得到一个编译器错误抱怨_struct不存在。我很确定这是因为预处理器处理宏的方式。有人有更好的建议吗?
我不想动态分配结构。
但我得到一个编译器错误抱怨_struct不存在
我编译了你的代码。它在我的系统上编译没有任何问题。您不应该使用以下划线开头的变量名称,因为它们是保留的。如果你可以发布完整的编译器消息会更好。
struct foo {
int var;
};
#define sizeit(x) .var = sizeof(struct x)
static const struct foo bar = {
.var = 8
};
static const struct foo bar2 = {
sizeit(foo)
};
int main()
{
return 0;
}
要获得preprocessed
源代码,我们可以使用gcc
和-E
选项。预处理的输出如下:
# 1 "stack_macro2.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "stack_macro2.c"
struct foo {
int var;
};
static const struct foo bar = {
.var = 8
};
static const struct foo bar2 = {
.var = sizeof(struct foo)
};
int main()
{
return 0;
}