C99/C11自参考子对象是否可以初始化?

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

首先,我应该说我不认为我想做的是可能的(已经阅读了我认为是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_初始值设定项宏中。可能吗

我知道这行不通:

#define FOO_INITIALIZER       \
{                             \
    .x = 1,                   \
    .y = &.x,                 \
}

如果可能的话,我应该查看ISO/IEC 9899:TC3的哪个部分?

用标准C语言无法实现您想要的功能。您可以通过
offsetof

继续传递名称(但这对嵌套对象不起作用)或存储偏移量而不是指针(如果这有意义)(高度依赖于应用程序),尽管它有一个好处:无需将名称放置两次,但与上面的非常类似。看起来这是用当前的C(或者我怀疑WG14是否会在标准中添加自引用的未来的C)可以做到的最好的方法。这就是我的想法。谢谢你的确认。我想在放弃我所追求的宏语法之前,我会问stackoverflow。