Фон
Так вот, что происходит, когда вы тратите несколько лет на написание Haskell, а затем go обратно на голый металл C код:
Вопрос
Возможно ли, чтобы функция имела в качестве возвращаемого типа указатель того же типа, что и сама функция? Так, каков синтаксис?
Находится ли имя функции в области видимости внутри тела функции? или я могу получить адрес функции, которая в данный момент выполняется?
Например
void foo() {
callmeback(&foo); // is this legal
}
Зачем вам это нужно?
У меня есть конечный автомат, который обрабатывает пользовательский ввод для некоторых очень ограниченных элементов управления, что означает, что две операции ввода должны обслуживать несколько различных режимов. Я реорганизую свой спагетти-код, полный операторов switch и глобальных переменных, во что-то более легкое в обслуживании. Если бы я работал в Haskell, я бы вызвал функцию текущего режима с пользовательским вводом и заставил бы ее вернуть функцию для вызова с последующим вводом - либо сам, либо обработчик для нового режима. Я начал делать это в C и понял, что понятия не имею, как написать тип функции-обработчика. Если это не сработает, я просто установлю глобальную переменную с помощью следующего обработчика и продолжу жизнь, но мне просто нужно было спросить, можно ли это сделать так же, как на функциональном языке.
Для любопытных, все это работает на ESP32, более мощном процессоре, но похожем на то, что идет с Arduino.