Fixe Rückgabewerte für C-Libs?

Gast #200711
Hallo,

wie ist das mit Rückgabewerten in C-Libs? Sollte ich diese fix
vergeben, also 0 für keinen Fehler und alles != 0 ist ein Fehler? Oder
lieber aus einer H-Datei mit definierten Rückgabe-Werten? Dann muss ich
bei jeder Änderung der defines auch die Lib neu kompilieren, oder?

Und was mach ich, wenn eine Lib-Funktion mehrere Rückgabewerte haben
kann? 0 = kein Fehler, 1 = Fehler-Nr. 1, 2 = Fehler-Nr. 2, usw.

Wie löst man das "korrekt"?

Gruß Ralf
Gast #200712
Das ist in der Tat eine übliche Konvention,
0 bei keinem Fehler und einen Wert != 0 bei einem Fehler
zurückzugeben.

Wenn die Fehlercodes eine Bedeutung haben, dann sollten diese als
#defines in einer Headerdatei dokumentiert werden; eine Funktion, die
diese Werte in eine Klartextrepräsentation übersetzt, ist beim Einsatz
auf µCs sicherlich verschmerzbar, beim Einsatz auf Systemen mit mehr
Resourcen aber sehr praktisch.

Es gibt allerdings auch andere Ansätze; manche Systeme geben einen Wert
!= 0 zurück, wenn alles in Ordnung ist, und 0, wenn ein Fehler
aufgetreten ist. Den Fehlercode muss man dann mit GetLastError() oder
einer vergleichbaren Funktion bestimmen.

Sofern die Funktion ein Objekt (Handle, Pointer) oder dergleichen
zurückgibt, ist das auch sinnvoll (Beispiel: fopen).

Eine weitere Variante ist die Verwendung vorzeichenbehafteter
Rückgabewerte. Negative Werte sind als Fehler anzusehen, positive Werte
sind gültige Resultate ...

Recht unpraktisch ist es, wenn eine Library mehrere Varianten mischt,
wie es beispielsweise die Win32-API ganz munter treibt. Einheitlichkeit
erfreut den Anwender.

Du siehst:
Es gibt kein eindeutiges Rezept; es kommt immer auf den spezifischen
Anwendungsfall an.
Gast #200713
Hm... Wenn ich das schon höre, das die Win32-Api munter mischt. Buäh,
Microsoft halt.

Hm, na gut, dann werd ich mir das für mich passende raussuchen.

Gruß Ralf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.