我可以在c结构声明中使用宏吗?

问题描述 投票:-1回答:1

我有

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不存在。我很确定这是因为预处理器处理宏的方式。有人有更好的建议吗?

我不想动态分配结构。

c struct macros
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.