In einigen Anwendungen stellen wir fest, dass einige Funktionen innerhalb einer anderen Funktion deklariert sind. Dies wird manchmal als verschachtelte Funktion bezeichnet, ist aber eigentlich keine verschachtelte Funktion. Dies wird als lexikalisches Scoping bezeichnet. In C hat das lexikalische Scoping keine Auswirkung, da der Compiler den richtigen Speicherort der inneren Funktion nicht finden kann.
Verschachtelte Funktionsdefinitionen können nicht auf lokale Variablen umgebender Blöcke zugreifen. Sie können nur auf globale Variablen zugreifen. In C gibt es zwei verschachtelte Bereiche: lokal und global. Daher haben verschachtelte Funktionen einige begrenzte Verwendungsmöglichkeiten. Wenn wir eine verschachtelte Funktion wie unten erstellen möchten, wird ein Fehler generiert.
#include <stdio.h> main(void) { printf("Main Function"); int my_fun() { printf("my_fun function"); // defining another function inside the first function. int my_fun2() { printf("my_fun2 is inner function"); } } my_fun2(); }
text.c:(.text+0x1a): undefined reference to `my_fun2'
Aber eine Erweiterung des GNU C-Compilers ermöglicht die Deklaration verschachtelter Funktionen. Dazu müssen wir das Schlüsselwort auto vor der Deklaration der verschachtelten Funktion hinzufügen.
#include <stdio.h> main(void) { auto int my_fun(); my_fun(); printf("Main Function</p><p>"); int my_fun() { printf("my_fun function</p><p>"); } printf("Done"); }
my_fun function Main Function Done
Das obige ist der detaillierte Inhalt vonIn der C-Sprache verschachtelte Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!