Mehrere Rückgabewerte

Gast #2294295
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
Gast #2294324
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.
Gast #2294338
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren