ich dies möchte arbeiten, aber es funktioniert nicht:Gibt es aa Weg Schließungen in C zu erreichen
#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();
}
Es tatsächlich tut Kompilierung und funktioniert für 1 Instanz ... aber der zweite schlägt fehl. Irgendeine Idee, wie man Schließungen in C bekommt?
Es wäre wirklich toll!
Sind Blöcke nicht nur ein Teil von Objective-C? Können Sie reines C als C kompilieren (und nicht einfach ObjC ohne Objekte oder Messaging) und Blöcke verwenden? – outis
@outis: Ich glaube, dass Apple Blöcke Unterstützung für GCC und Clang in allen C-verwandten Sprachen, nicht nur Objective-C hinzugefügt hat. Aber ich habe kein OS X-Gerät, um es zu testen. – ephemient
Sie haben Recht. Ich habe es getestet und es funktioniert in reinem C. Ich habe C++ nicht getestet, aber das funktioniert wahrscheinlich auch. – outis