Страницы

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

четверг, 16 мая 2019 г.

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

Есть переменная a
struct { short kto; int prichital; char tot; } (*(*(*a)))()()();
Какой размер у переменной и как его расшифровать?


Ответ

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

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

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