C99/C11 Самостоятельная ссылка на подобъект Инициализация возможна?
Сначала я должен сказать, что я не думаю, что то, что я хочу сделать, возможно (прочитав то, что я считаю соответствующими частями 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 ответ
На стандартном языке Си нет способа достичь того, чего вы хотите. Вы можете либо продолжить передачу имени (но это не работает для вложенных объектов), либо сохранить смещения вместо указателей, если это имеет смысл (сильно зависит от приложения), с помощью offsetof
,