Forum: PC-Programmierung Fixe Rückgabewerte für C-Libs?


von Ralf (Gast)


Lesenswert?

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

von Rufus T. Firefly (Gast)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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

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.