2

我首先应该说我认为我想做的事情是不可能的(已经阅读了我认为是 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 的哪个部分?

4

1 回答 1

1

没有办法在标准 C 语言中实现您想要的。如果有意义(高度依赖于应用程序),您可以继续传递名称(但这对于嵌套对象不起作用)或存储偏移量而不是指针(高度依赖于应用程序)offsetof

于 2018-11-28T16:50:43.483 回答