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