C99 / C11 Самостоятельная ссылка на подобъект Инициализация возможна? - PullRequest
0 голосов
/ 28 ноября 2018

Сначала я должен сказать, что не думаю, что то, что я хочу сделать, возможно (прочитав то, что я считаю соответствующими частями 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 мне следует обратиться?

1 Ответ

0 голосов
/ 28 ноября 2018

Нет способа добиться того, что вы хотите на стандартном языке Си.Вы можете либо продолжить передачу имени (но это не работает для вложенных объектов), либо сохранить смещения вместо указателей, если это имеет смысл (в значительной степени зависит от приложения), через offsetof.

...