Это зависит от того, что вы имеете в виду, когда говорите «С».
Предполагая, что вы действительно хотите получить что-то, что вы можете вызвать с помощью простого приложения-функции, ISO C делает такую вещь довольно трудной для выполнения - возможно, невозможной, если вы действительно хотите оставаться в рамках стандарта и не использовать некоторые из них. низкоуровневые сборочные приемы .
Clang , однако, реализует нестандартную поддержку замыканий , которая фактически делает такие вещи возможными. Используя эту функцию, ваш пример может быть реализован следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <Block.h>
int (^plus(int x))() {
return Block_copy(^(int y) {
return x + y;
});
}
int main() {
int (^plus2)(int) = plus(2);
printf("2 + 3 = %d\n", plus2(3));
Block_release(plus2);
return EXIT_SUCCESS;
}