me gustaría que esto funcione, pero no es así:¿Hay aa manera de lograr cierres en C
#include <stdio.h>
typedef struct closure_s {
void (*incrementer)();
void (*emitter)();
} closure;
closure emit(int in) {
void incrementer() {
in++;
}
void emitter() {
printf("%d\n", in);
}
return (closure) {
incrementer,
emitter
};
}
main() {
closure test[] = {
emit(10),
emit(20)
};
test[0] . incrementer();
test[1] . incrementer();
test[0] . emitter();
test[1] . emitter();
}
En realidad, hace de compilación y de hecho funciona de 1 instancia ... pero el segundo falla ¿Alguna idea de cómo obtener cierres en C?
¡Sería realmente increíble!
¿Los bloques no son solo una parte de Objective-C? ¿Puedes compilar C puro como C (y no simplemente ObjC sin objetos o mensajes) y usar bloques? – outis
@outis: Creo que Apple agregó bloques de compatibilidad a GCC y clang en todos los lenguajes relacionados con C, no solo en Objective-C. Pero no tengo una máquina OS X para probarlo. – ephemient
tienes razón. Acabo de probarlo, y funciona en C. puro. No probé C++, pero eso probablemente también funciona. – outis