C99/C11自参考子对象是否可以初始化?
首先,我应该说我不认为我想做的是可能的(已经阅读了我认为是ISO C99的相关部分),但这里是我现在的大致想法:C99/C11自参考子对象是否可以初始化?,c,c99,c11,subobject,C,C99,C11,Subobject,首先,我应该说我不认为我想做的是可能的(已经阅读了我认为是ISO C99的相关部分),但这里是我现在的大致想法: struct foo { int x; int *y; }; #define FOO_INITIALIZER(name) \ { \ .x = 1, \ .y = &(name).x, \ } struct foo bar = F
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_初始值设定项宏中。可能吗
我知道这行不通:
#define FOO_INITIALIZER \
{ \
.x = 1, \
.y = &.x, \
}
如果可能的话,我应该查看ISO/IEC 9899:TC3的哪个部分?用标准C语言无法实现您想要的功能。您可以通过
offsetof
继续传递名称(但这对嵌套对象不起作用)或存储偏移量而不是指针(如果这有意义)(高度依赖于应用程序),尽管它有一个好处:无需将名称放置两次,但与上面的非常类似。看起来这是用当前的C(或者我怀疑WG14是否会在标准中添加自引用的未来的C)可以做到的最好的方法。这就是我的想法。谢谢你的确认。我想在放弃我所追求的宏语法之前,我会问stackoverflow。