[erledigt]: Funktionswert Rückgabe über Stack?

Kurze (villeicht dumme?) Frage: Wenn eine Funktion habe z.B :

uint8_t e_BattCap(){ 
  digitalWrite (e_Bat_TestEnPin, on);             // e_Bat zur Prüfung belasten
  delay(1000);                                    // belaste für 1 Sec. 
  uint8_t capa = map(analogRead(A1),0,1023,0,3);  // die Spannung der belasteten e_bat messen 
  digitalWrite (e_Bat_TestEnPin, off);            // e_Bat wieder entlasten
  return capa;                              
} 

via return einen Wert zurück gibt, so wie hier der Wert 'capa', wird dieser Wert eigentlich über den Stack zurückgegeben und erst nach rückkehr aus der funktion der beim Aufruf genanten Variablen zugewiesen. Ich rufe ja die funktion bspw. mit :

byte capaciti = e_BattCap();

auf.
ich habe jedoch festgestellt, dass ich die Funktion auch mit;

e_BattCap(); 

aufrufen kann - ok bei dieser Funktion macht das keinen Sinn , ich hab aber andere Funktioen, bei denen der Rückgabewert nicht immer benötigt wird.
Die Frage ist nur, was passiert dann mit dem Rückgabewert? bleibt der auf dem Stack liegen und kann mit der Zeit zu einem Stack Overflow führen?

Danke an euch für die Aufklärung.

https://gcc.gnu.org/wiki/avr-gcc

Serial.print() hat als Rückgabewert die Anzahl ausgegebener Zeichen!
Wer hat die jemals ausgewertet?
len += Serial.print()
Nur ich?
:innocent:

Die Rückgabe erfolgt über Register,
wenn du deren Inhalt nicht benutzt, tut das niemandem weh.

Return values with a size of 1 byte up to and including a size of 8 bytes will be returned in registers.

Der Wert wird schon vom Compiler wegoptimiert, weil er nicht mehr gebraucht wird. Der kann übrigens sogar den kompletten Umweg über das Stack wegoptimieren, wenn die Zielvariable die einzige ist, die das Funktionsergebnis zugewiesen bekommt.

Euch allen vielen herzlichen Dank, damit ist mir geholfen und ich brauche da keine Angst mehr haben. Die betroffene Fuktion ist bei mir der Error-Handler (handelt mechanische und elektrische Hardware-Fehler, wie Durchgebrannte Sicherungen und blokierte Antriebe , wenn das system dias Problem nicht automatisch lösen kann) Beim Error-Resume z.B. brauche ich den Rückgabewert des Handlers nicht.
Und danke euch, dass niemand mein 'delay' angemosert hat.

Also ich jedenfalls nicht, habe mich damit auch nicht so tief auseinander gesetzt, dass mir das überhaupt bekannt war. :thinking:

Ach ja, bei welchem beitrag soll ich jetzt den 'solution' haken setzen? - es sind ja alle Antworten die Lösung für mich.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.