#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.
Комментариев нет:
Отправить комментарий