【发布时间】:2018-11-28 16:24:07
【问题描述】:
我首先应该说我不认为我想做的事是可能的(阅读了我认为是 ISO C99 的相关部分),但这里是我现在所拥有的粗略概念:
struct foo {
int x;
int *y;
};
#define FOO_INITIALIZER(name) \
{ \
.x = 1, \
.y = &(name).x, \
}
struct foo bar = FOO_INITIALIZER(bar);
这在 C99/C11 中有效,但我真正想要的是将 name 参数放到 FOO_INITIALIZER 宏中。这可能吗?
我知道这行不通:
#define FOO_INITIALIZER \
{ \
.x = 1, \
.y = &.x, \
}
如果可能的话,我应该查看 ISO/IEC 9899:TC3 的哪个部分?
【问题讨论】:
-
与上面非常相似,但它确实有一个好处:不需要输入两次名称。看起来这是当前 C(或未来 C,因为我怀疑 WG14 会在标准中添加自引用)可以做到的最好的。