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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.