Язык C: имена после списка struct-объявление-списка - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь лучше понять C и, пытаясь понять ошибку, которую я получил, я наткнулся на этот вопрос.В конце концов я понял, что я делаю неправильно, но код в этом вопросе сбивает меня с толку:

struct {
      uint8_t time;
      uint8_t type;
      uint8_t phase;
      uint8_t status;
} Raw_data_struct;

typedef struct Raw_data_struct Getst_struct;

void Getst_resp(Getst_struct Data);

Насколько я понимаю, проблема заключалась в том, что название структуры было помещено не в том месте,что означало, что структура была определена анонимно, и поэтому имя «Raw_data_struct» не было доступно при использовании typedef.

Однако, что компилятор сделал с именем?Я проверил на этом сайте cpp reference , но они упоминают только два типа объявления структуры, одним из которых является определение.Кажется, что определение не учитывает ничего после списка struct-объявление.Тем не менее, ни один компилятор, который я пробовал, не идентифицировал это как ошибку (я пробовал и gcc, и clang).

Я хотел бы понять, как используется объявление struct.Имя «Raw_data_struct» используется для чего-либо или просто игнорируется?Есть ли причина, по которой это не ошибка?

Спасибо, что прочитали это!

1 Ответ

0 голосов
/ 07 июня 2018

Имя, помещенное после определения структуры, является переменной в этой области типа этой структуры.В этом случае Raw_data_struct является переменной типа этой анонимной структуры.

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