Страницы

Поиск по вопросам

среда, 26 февраля 2020 г.

Непонятный синтаксис с двумя именами в typedef

#c #typedef #union


typedef union {  
    char word[16];  
    uint32_t chunk[4];  
    uint64_t big_chunk[2];  
} Word, *PWord;   // <-- Что означают эти два имени?

    


Ответы

Ответ 1



Да хоть с десятью именами. Как и [почти] любое объявление в С, typedef-объявление может объявлять несколько идентификаторов сразу const int a, *b, *const *c, d[5], e(void); // эквивалентно const int a; const int *b; const int *const *c; const int d[5]; const int e(void); Точно так же typedef int a, *b, *const *c, d[5], e(void); // эквивалентно typedef int a; typedef int *b; typedef int *const *c; typedef int d[5]; typedef int e(void); Именно это и используется в вашем объявлении. То, что в объявлении фигурирует union, тут никакой принципиальной роли не играет. Если бы у вашего union был указан тэг (скажем, W), то можно было разбить ваше объявление на три отдельных объявления union W { char word[16]; uint32_t chunk[4]; uint64_t big_chunk[2]; }; typedef union W Word; typedef union W *PWord;

Ответ 2



Объявлены: Word - тип объединения, PWord - тип указателя на объединение. Вас это интересовало?

Комментариев нет:

Отправить комментарий