Funktionen verschachteln

Hallo,

kann/darf man Funktionen ineinander verschachteln?

Beispiel:

void f1()
{
f2()
}

Kann grad nicht testen, da kein Arduino zur Hand.

Gruß Chris

Chris72622:
kann/darf man Funktionen ineinander verschachteln?

Ja, natürlich. Beispiel:

void setup()
{
  pinMode(2, INPUT); // Funktion "pinMode" wird innerhalb Funktion "setup" aufgerufen
}

Es ist das Wesen der strukturierten Programmierung, dass Funktionen aus Funktionen heraus aufgerufen werden. Sogar "rekursive Funktionen" sind möglich, dass sich eine Funktion bis zum Erreichen einer Abbruchbedingung selbst aufruft.

Du müßtest bloß aufpassen, dass sich Funktionen nicht immer gegenseitig selbst aufrufen, also f1() ruft f2() auf und in f2() wird direkt wieder f1() aufgerufen. Oder eine endlose Rekursion ohne Erreichen der Abbruchbedingung, bei der eine Funktion sich immer wieder selbst aufruft. Dabei läuft innerhalb kürzester Zeit der Stack-Speicherbereich im RAM über und das Programm steht ("hat sich aufgehängt").

Prinzipiell geht das natürlich. Auf Microcontrollern gibts das praktische Problem des sehr kleinen Stack, auf dem jeweils die Rücksprungparameter der aufrufenden Prozedur abgelget werden um nach Beendigung der aufgerufenen Prozedur wieder geladen zu werden. Ist die Verschachtelung zu tief oder die Datenmenge der mitgeschleppten Parameter zu groß (Strings, Bilddaten), läuft dieser reservierte Speicherbereich über und das System hängt sich auf.

Chris72622:

void f1()

{
f2()
}

Nur solltst du das Semikolon hinter f2() nicht vergessen, sonst geht es nämlich nicht :wink:
(aber das war ja wohl nur ein Tippfehler, oder?)

Ja, war ein Tippfehler. Danke allen! :slight_smile:

Gruß Chris