Уникальный синтаксис статической структуры в C? - PullRequest
2 голосов
/ 24 июня 2011

Я натолкнулся на то, что мне показалось уникальным синтаксисом, которого я никогда раньше не видел (в основном я из C ++). Я не уверен, что код ниже. Я предполагаю, что это своего рода уникальный способ определения структуры, но если бы кто-то мог четко объяснить, что они здесь делают, это было бы очень полезно!

static Foo f =
{

    .a = {DEFAULT_FOO},
    .b = DEFAULT_BAR,
    .c[0] = { 0 }

#ifdef BAR
    ,
    .c[1] = { 0 },
    .c[2] = { 0 }
#endif
};

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

Это синтаксис инициализации C99.

Обратите внимание, что последняя запятая в C99 в порядке, и фрагмент мог быть написан

static Foo f =
{
    .a = {DEFAULT_FOO},
    .b = DEFAULT_BAR,
    .c[0] = { 0 },
#ifdef BAR
    .c[1] = { 0 },
    .c[2] = { 0 },
#endif
};

Примечание запятая после .c[0] и .c[2].

2 голосов
/ 24 июня 2011

#ifdef - простая старая условная компиляция: две нижние строки исчезают, если определено BAR.

.a = {DEFAULT_FOO} - это синтаксис инициализации C99, он предоставляет начальное значение для поля a структуры.

static в C делает глобальную переменную f невидимой для компоновщика, поэтому она не будет доступна вне текущей единицы перевода и не будет конфликтовать с переменными с аналогичными именами в других единицах перевода.

0 голосов
/ 24 июня 2011

это помеченная инициализация структуры, описанная здесь

странная свисающая запятая сразу после #ifdef только для того, чтобы убедиться, что между элементами есть запятая, но нет в концеАктивна или нет последняя часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...