Страницы

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

пятница, 28 февраля 2020 г.

Что за тип у переменной?

#c


Есть переменная a

struct {
    short kto;
    int prichital;
    char tot;
} (*(*(*a)))()()();


Какой размер у переменной и как его расшифровать?
    


Ответы

Ответ 1



Согласно правилу часовой стрелки, а так же сайту cdecl.org, переменная a является: указателем на указатель на указатель на функцию, возвращающую функцию, возвращающую функцию, возвращающую упомянутую безымянную структуру. Т.к. в Си запрещено возвращать из функции функцию (а не указатель на неё), то данный код не является валидным. error: 'a' declared as function returning a function Чтобы он стал валидным, нужно возвращать указатель на функцию, получится так: struct { ... } (*(*(*a)())())(); При этом безымянность структуры накладывает свои ограничения. Указатель объявили, но инициализировать чем-то полезным, чтобы иметь возможность вызвать - проблематично. Говорить же о размере некоторой сущности, не являющейся валидной с точки зрения языка нельзя вовсе. Ну а после приведения к компилируемому виду можно воспользоваться sizeof.

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

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