Forum: Mikrocontroller und Digitale Elektronik Mehrere Rückgabewerte


von whotf (Gast)


Lesenswert?

Hallo,

Oft bietet es sich an in Funktionen mit Rückgabewert so vorzugehen

int test() {
  ...
  if ()
    return 1;
  else if ()
    return -1;

  return 0;
}

oder

int test() {
  int a = 0;

  if ()
    a = 1
  else if ()
    a = -1

  return a;
}

Welchen "Stil" sollte man bevorzugen. Hat einer der beiden einen Geschw. 
oder Speicherbedarf Vorteil?

mfg

von MaWin (Gast)


Lesenswert?

Da du im ersten Fall das else weglassen kannst

  if ()
    return 1;
  if ()
    return -1;
  return 0;

wird der Compiler aus dem ersten Fall etwas kürzeres machen,
obwohl kluge Compiler eigentlich beide Varianten zu demselben
Code compilieren sollten.

von Verwirrter Anfänger (Gast)


Lesenswert?

Ich verwende auch öfter die Variante mit mehreren returns. Allerdings 
wirklich nur da, wo sie sinnvoll ist, D.h. wo man sich innerhalb von 
kritischen Funktionen Variablen oder Instruktionen spart.

Ansonsten hat die single exit schreibweise 2 Vorteile:

- Meiner Meinung macht sie den Code übersichtlicher. Ich hab schon ein 
paar mal ungläubig über Codezeilen geguckt und nichts verstanden, bis 
ich gemerkt habe, dass das ganze nur ein Spezialfall war und alle 
anderen Fälle schon vorher beendet wurden

- Es macht es manchmal einfacher den Speicher aufzuräumen, und sicher zu 
gehen, dass alles was nötig ist wieder freigegeben wurde.

Soweit ich weiss, wird das deshalb auch in manchen Guidelines für 
sicherheitskritischen Code vorgeschrieben (z.B. Automobilbereich)

Die große Ausnahme, die ich fast immer anwende sind Sachen wie:
1
uint8_t loadFile(char* filename, uint8_t data*){
2
  if(!filename) {
3
    return 0;
4
  }
5
  ...
6
}

oder
1
uint8_t ungaublichKomplizierteBildbearbeitung(uint8_t *a, uint8_t *b, uint16_t x, uint16_t y) {
2
  uint16_t *temp = calloc(x*y, sizeof(uint16_t));
3
  if (temp == null) {
4
    return 0
5
  }
6
  ...
7
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.