Je commence à apprendre la programmation fonctionnelle et je voulais voir si je pouvais sortir avec des fermetures en C. Pour reproduire premier exemple de Wikipedia - Closures I codé le code suivant:Fermeture en C - Est-ce que cela fonctionne?
#include <stdio.h>
void closure (int(** f)(int), int *x) {
int fcn(int y) {
return *x + y;
};
*f = fcn;
}
int main()
{
int x = 1;
int(* f)(int);
closure(&f, &x);
printf("%d", f(2));
return 0;
}
Il a été compilé (gcc 4.8.2 sur Ubuntu 14.04.) Et cela fonctionne, il imprime 3. Comme mon manque d'expertise en C (seulement les cours de base sur le collège), ma question est, y at-il quelque chose de grave avec ce code? On m'a enseigné les définitions de fonction doit être globale et je ne m'y attendais pas été à travailler ...
Edit: Et pourquoi est-ce, quand je change la fonction principale comme ceci:
int main()
{
int x = 1;
int(* f)(int);
closure(&f, &x);
printf("%d", f(2));
printf("%d", f(3)); // the only difference
return 0;
}
Je reçois Segmentation faute?
Merci pour votre réponse. J'ai édité une question avec un exemple qui ne fonctionne pas (désolé de ne pas l'avoir posté plus tôt). Ne devrait-il pas y avoir quelques problèmes de mémoire comme l'accès aux variables locales hors de portée ou quelque chose de similaire? –