Betrachten Sie diese Funktion:Wie Code aufblasen in C von Fehlerbehandlung reduzieren und debuggt
int get_result(int *result) {
int err = 0;
int number = 0;
if (result == NULL) {
printf("error: null input\n");
return -1;
}
err = get_number(&number);
if (err != 0) {
printf("error calling get_number: err = %d\n", err);
return err;
}
err = calculate_result(number, result);
if (err != 0) {
printf("error calling get_result: err = %d\n", err);
return err;
}
return err;
}
Die eigentliche Arbeit in dieser Funktion nur 3 Zeilen erfordert (Anzahl Variable deklariert, ruft GET_NUMBER(), dann calculate_result nennen ()). Der Code zur Fehlerüberprüfung/-verarbeitung erweitert diese Funktion jedoch auf 17 Zeilen (Geben oder Nehmen, je nachdem, wie Sie die Zeilen zählen).
In einem größeren Maßstab, mit vielen Aufrufen und mehreren Fehlerprüfungen, blähen wir die Funktion vollständig auf und machen sie unlesbar und sehr schwer zu verstehen.
Was sind Möglichkeiten, um diese Blähungen in C-Code zu umgehen und die Lesbarkeit der Kernoperation einer Funktion beizubehalten (ohne wesentlichen Fehlerbehandlungscode zu opfern)?
Warum verwenden Sie 'errno' als Typname? – EOF
gut. Wenn Sie nicht nach stderr drucken und die geschweiften Klammern schneiden, sparen Sie 4-6 Zeilen. 'c' ist so. Eigentlich sind alle Sprachen so, man kann in Java argumentieren, dass man auch einen einfachen Aufruf zu einem try-catch-Block erweitert. Also, Sie programmieren, was Sie brauchen. – HuStmpHrrr
Sie können, tatsächlich mit Makro speichern Sie einige Arbeit, sagen '#define SAFE_CALL (Ausdruck) {errno err = Ausdruck; if (err! = 0) gib zurück; } '. Das wäre nicht schlimm, wenn Sie die Verwendung in Ihrem Code in einem vernünftigen Rahmen einschränken würden. – HuStmpHrrr