Ich verwende auch öfter die Variante mit mehreren returns. Allerdings
wirklich nur da, wo sie sinnvoll ist, D.h. wo man sich innerhalb von
kritischen Funktionen Variablen oder Instruktionen spart.
Ansonsten hat die single exit schreibweise 2 Vorteile:
- Meiner Meinung macht sie den Code übersichtlicher. Ich hab schon ein
paar mal ungläubig über Codezeilen geguckt und nichts verstanden, bis
ich gemerkt habe, dass das ganze nur ein Spezialfall war und alle
anderen Fälle schon vorher beendet wurden
- Es macht es manchmal einfacher den Speicher aufzuräumen, und sicher zu
gehen, dass alles was nötig ist wieder freigegeben wurde.
Soweit ich weiss, wird das deshalb auch in manchen Guidelines für
sicherheitskritischen Code vorgeschrieben (z.B. Automobilbereich)
Die große Ausnahme, die ich fast immer anwende sind Sachen wie:
1 | uint8_t loadFile(char* filename, uint8_t data*){
|
2 | if(!filename) {
|
3 | return 0;
|
4 | }
|
5 | ...
|
6 | }
|
oder
1 | uint8_t ungaublichKomplizierteBildbearbeitung(uint8_t *a, uint8_t *b, uint16_t x, uint16_t y) {
|
2 | uint16_t *temp = calloc(x*y, sizeof(uint16_t));
|
3 | if (temp == null) {
|
4 | return 0
|
5 | }
|
6 | ...
|
7 | }
|