我可以在c结构声明中使用宏吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以在c结构声明中使用宏吗?相关的知识,希望对你有一定的参考价值。
我有
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;
}
以上是关于我可以在c结构声明中使用宏吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 Access VBA 来确定表是不是有数据宏吗?