我有
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不存在。我很确定这是因为预处理器处理宏的方式。有谁有更好的建议?
我不想动态分配结构。
答案 0 :(得分:1)
但是我收到一个编译器错误,抱怨_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;
}