Ich schreibe eine C-Bibliothek für ein Softwareprojekt. Ich muss einige Fehler melden, aber ich bin ein bisschen zu faul, um meine eigenen komplexen Fehlercodes, Variablen und Funktionen zu implementieren. Ist es akzeptabel, die von libc zur Verfügung gestellte errrno-Funktion für benutzerdefinierte Fehlerberichte zu verwenden? Alle meine Fehler passen in die Kategorien E...
Makros.Verwenden von Fehlernummern für Anwendungs-/Bibliotheksfehlerberichte
Nehmen wir zum Beispiel an, dass mein Code eine Funktion enthält, die einen SHA256-Hash in hexadezimaler Schreibweise liest und ihn in eine Art internes Format konvertiert. Ich mag errno
verwenden, um Fehler zu melden:
#include <errno.h>
int hash_fromstr(hash_t *out, const char *in) {
/* ... */
if (strlen(in) != 65) {
errno = EINVAL;
return -1;
}
/* ... */
}
Natürlich ist dieses Beispiel lächerlich vereinfacht wird, in Wirklichkeit viel mehr Fehler in anderen Funktionen passieren können.
Solange Ihre Bibliothek die Standardfehlercodes ausgeben kann, ohne die ordnungsgemäße Funktion von 'errno' in anderen Teilen einer Benutzeranwendung, die mit Ihrer Bibliothek verknüpft ist, zu unterbrechen, sehe ich kein Problem damit. Vielleicht könnten Sie die Variable 'errno' verwenden, aber nicht ändern und eine Kopie davon zurückgeben? – Chimera
@Jim Ich möchte 'errno' für Fehler verwenden, die innerhalb der Bibliothek selbst auftreten - nicht notwendigerweise in der Funktion der libc, die von der Bibliothek aufgerufen wird. – fuz
Also fragen Sie, ob es in Ordnung ist, den Wert von 'errno' zu setzen, um Fehler beim Aufrufer Ihrer Bibliothek zu melden? Wenn ja, möchtest du vielleicht http://stackoverflow.com/questions/9856822/should-i-set-errno – Chimera