Re: Функція, що повертає вказівник на саму себе
На роботі зтикнувся з дуже подібною задачою і ми застосували структури як контейнери для вказівника на функцію заданої сіґнатури.
Якщо брати за основу старий код з приведеням типів і переписати його на структури, то буде :
#include <stdio.h>
typedef union fptr_inside func_type;
typedef func_type (*fptr)(int);
union fptr_inside { fptr f; };
func_type func(int n) {
printf(" %i", n);
return (func_type){ .f = func };
}
int main() {
printf("\r\n start");
func_type f = { .f = func };
for(int i = 0; i < 5; ++i)
f = f.f(i);
printf("\r\n -----");
func(0).f(1).f(2);
printf("\r\n finish");
}
Фокус в тому, що на лінії
typedef union fptr_inside func_type;
сам union fptr_inside { ... } ще не існує. Ми його означимо після того як всі typedef'и відпрацюють.
Також замість union можна давати struct.
Це досить зручно, накладає на типи саме ті обмеженя які ми хотіли, і залишає підказки для розробника.