Forum: Mikrocontroller und Digitale Elektronik Sinnvoller Rückgabewert


von Mehrle (Gast)


Lesenswert?

Was ist sinnvoll für einen Rückgabewert.
Brauche jeweils einen für erfolgreich abgearbeitet sowie vorzeitig 
abgebrochen.

Sicherlich kann ich nun return 1 oder 0 machen, nur was ist so das 
gängige Verfahren?

return 1  // wenn ausgeführt wurde
return 0  // wenn es abgebrochen wurde

?

von Ulli N. (Gast)


Lesenswert?

Meistens nimmt man negative Werte für Fehler und 0 für OK. Kannst du 
aber halten wie du willst.

Vielleicht willst du aber auch noch unterscheiden, wo der Fehler 
passiert ist, oder Fehlerklassen (z.B. tolerant weitermachen oder ganze 
Aktion abbrechen). Wenn du z.B. int als Rückgabetyp nimmst, kannst du 
damit ja schon eine ganze Menge "kodieren".

von Daniel A. (daniel-a)


Lesenswert?

Nimm einen enum. Der lässt sich dann beliebig erweitern, falls zukünftig 
weitere statuscodes zurückgegeben werden, z.B. Pausiert

von Mehrle (Gast)


Lesenswert?

Danke.
Umfangreiche Fehlercodes gibt es nicht. Es gibt nur die Unterscheidung, 
ob Wert kleiner oder größer ist als der gewünschte Bereich.
-2 // Wert unterschritten
-1 // Wert überschritten
 0 // Wert iO

reicht hier aus.

von Bernhard F. (bernhard_fr)


Lesenswert?

1
typedef enum vorgang
2
{
3
     erfolgreich,       // entspricht 0
4
     unterschritten,
5
     ueberschritten
6
                        // moegliche Erweiterungen
7
}vorgang_t;

Klingt für mich übersichtlich und man muss nicht raten bzw zusätzlich 
kommentieren, warum jetzt die Funktion X auf -2 abgefragt wurde.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Wenn Du in C programmierst und wirklich nur OK und Fehler zurückgeben 
willst, verwendest Du 0 für Fehler und 1 für OK.

Beispiel:
1
int funktionErfolgreich() {
2
   ...
3
   return 1;
4
}
5
6
if (funktionErfolgreich()) {
7
  ...
8
}
9
10
...
11
if (!funktionErfolgreich()) {
12
  ...
13
}

Auf diese Art sparst Du dir die Vergleichsoperation.
1
if (funktionErfolgreich() == 1) {
Liest sich nicht so flüssig.

Alternativ (also in Deinem Fall) kann man auch sehr gut ENUM verwenden.
1
if (torSchliessen() == TOR_GESCHLOSSEN) {
2
3
}
4
...
5
if (torSchliessen() == TOR_KLEMMT) {
6
7
}

Nimm sinnvolle Namen. Dann ist der Code auch flüssig lesbar.

Auch fallen Tippfehler schneller auf.
1
if (funktion() == -3) { ...
Ist so weit korrekt - auch wenn -3 nicht als Rückgabe existiert.
"TOR_KEMT" wird Dir aber gnadenlos um die Ohnen gehauen.

: Bearbeitet durch User
von eagle user (Gast)


Lesenswert?

Christian H. schrieb:
> verwendest Du 0 für Fehler und 1 für OK.

sag bitte, dass das ein Tippfehler war.

von Walter Tarpan (Gast)


Lesenswert?

eagle user schrieb:
>> verwendest Du 0 für Fehler und 1 für OK.
>
> sag bitte, dass das ein Tippfehler war.

Tja....da gibt es zwei Philosophien mit jeweils negierter Logik.

von eagle user (Gast)


Lesenswert?

Walter Tarpan schrieb:
> eagle user schrieb:
>>> verwendest Du 0 für Fehler und 1 für OK.
>>
>> sag bitte, dass das ein Tippfehler war.
>
> Tja....da gibt es zwei Philosophien mit jeweils negierter Logik.

da können wir ja froh sein, dass Computer nur 0 und 1 kennen.
oh, Moment...


FunFact: unter VMS gilt: 1 = OK, 2,4,6... = Fehler, 0 = undefiniert :)

von Dirk B. (dirkb2)


Lesenswert?

Mehrle schrieb:
> Danke.
> Umfangreiche Fehlercodes gibt es nicht. Es gibt nur die Unterscheidung,
> ob Wert kleiner oder größer ist als der gewünschte Bereich.
> -2 // Wert unterschritten
> -1 // Wert überschritten
>  0 // Wert iO
>
> reicht hier aus.

Dann kannst du auch
  -1 // Wert unterschritten
   0 // Wert iO
  +1 // Wert überschritten
nehmen.

Ist evtl. intuitiver

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.