#c #function-pointers
#c #указатели на функции
Вопрос:
Я хотел бы преобразовать
typedef double (*Function)(double s[4]);
double f1 (double x[N]) {return x[0]*x[1];}
Function t = f1;
к чему-то вроде этого:
typedef double (*Function)(double s[4]);
Function t = ({ return x[0]*x[1];});
который возвращает ошибку «пустое значение, которое не игнорируется, как должно быть».
Как я могу заставить это работать?
Комментарии:
1. В C нет лямбд, если только это не расширение, специфичное для компилятора.
2. @SuperStormer грязный обходной путь в моем ответе — но требует расширения вложенных функций.
Ответ №1:
В C нет анонимных функций или лямбда-выражений. Так что это невозможно.
РЕДАКТИРОВАТЬ: ПСЕВДО-ЛЯМБДА
Крошечный грязный обходной путь для компиляторов, которые допускают вложенные функции:
#define lmb(rt, fb)({rt fn__fn__fn_ fb fn__fn__fn_; })
int main(void)
{
double (*f)(double x[]) = lmb(double, (double x[]) { return x[0] * x[1]; });
double x[] = {4.0, 5.0};
printf("%fn", f(x));
}