Rüdiger Plantiko

Zurück
Wer bereit ist, seinen C-Code nur mit gcc zu compilieren (und damit immer noch plattformunabhängig zu sein - nämlich so plattformunabhängig, wie es gcc eben ist!), der braucht beim C-Programmieren nicht auf Closures zu verzichten. GCC bietet schon lange das Feature der inneren Funktionen. Das sind Funktionen, deren Binärcode wie ein Datenobjekt auf dem Stack allokiert wird. Ein Zugriff auf alle Daten des Stacks ist möglich. Allerdings ist die innere Funktion nur solange verfügbar, wie die äussere Funktion noch auf dem Stack lebt: Sobald die äussere Funktion verlassen wird, ist auch ein Zugriff auf die innere Funktion nicht mehr möglich. Gewisse Dinge, die man sonst mit Closures macht, z.B. Event Handling, sind daher nicht möglich (denn dort lebt die Funktionsreferenz länger als die Funktion, in der sie definiert wurde).

Wenn aber der Zugriff auf die Funktion noch möglich ist - also in den tieferen Stackebenen - verhält sich eine innere Funktion wie eine Closure, indem auch alle Variablen, die im Kontext der äusseren Funktion existieren (d.h. ihre lokalen Variablen und ihre Parameter), auch für die innere Funktion verwendbar sind.

Veröffentlicht: Dienstag, den 4. Oktober 2011