Что означает структура внутри другого без имени тега? - PullRequest
5 голосов
/ 25 января 2011

Я только что натолкнулся на фрагмент кода: -

struct a {
    int mem1;
    char mem2;

    struct {
        int inner_mem1;
        int inner_mem2;
    };
};

И я обнаружил, что фрагмент кода с использованием членов внутренней структуры напрямую использует имя переменной внешней структуры !!! например:

struct a *avar;
....
avar->inner_mem1

Это законно, однако код компилируется и работает нормально !. Какова цель использовать его таким образом? Какие-то конкретные сценарии?

Пожалуйста, дайте мне знать ваши мысли.

1 Ответ

7 голосов
/ 25 января 2011

Это называется «анонимная структура»:

Безымянный член типа структуры без тега называется анонимным состав; неназванный член союза тип без тега называется анонимный союз. Члены анонимная структура или союз считаются членами содержащие структуру или объединение. это применяется рекурсивно, если содержащий Структура или объединение также является анонимным.

Это не является частью текущего стандарта C, C99, но предполагается, что он будет частью будущего (цитата выше). Кроме того, многие компиляторы уже поддерживают эту функцию как расширение.

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