Я нашел одно решение. Компилятор выдает эту ошибку, потому что я объявил и инициализировал структуру внутри main
. Перемещение этого сегмента из main
решит эту проблему.
Окончательное решение выглядит следующим образом:
#define VA_NARGS_IMPL(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) 2 * N
#define VA_NARGS(...) VA_NARGS_IMPL(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
#define FillStruct(...) { .Length = VA_NARGS(__VA_ARGS__), .Data = {__VA_ARGS__} }
const MyStruct Obj = FillStruct(1, 2, 3, 4, 5);
int main(void)
{
int B = Obj.Data[2];
// B = 3
}
Так что теперь все в порядке. Кажется, что неправильный вывод отладчика также появляется с ключевым словом const
. Но теперь я могу удалить const
и static
, чтобы получить в структуре corrent Length
(но не Data
).