do{}while(false); -- ein besseres goto?
-
;fricky schrieb:
abc.w schrieb:
Ja, aber vielleicht ließe sich mit diesen Regeln der Code des Thread-Erstellers vermeiden...
if...else if...else if...usw. solltens auch tun.
Ja, man sollte aber noch eine solche Kette von "if-else if" mit einem "else" abschließen
. Es gibt, glaube ich, eine MISRA Regel dazu... Also ungefähr so:
if (...)
{
...;
}
else if (...)
{
...;
}
else if (...)
{
...;
}
else
{
...;
};fricky schrieb:
MISRA-regeln sind aber trotzdem ziemlicher blödsinn.
Nein.
-
Stilist schrieb:
Hallo. Ich bin in einem Projekt öfter auf code dieser Form gestoßen:
do { // some code if ( someCondition ) { // do something break; } if ( someOtherCondition ) { // do something break; } // more code if ( yetAnotherCondition ) { break; } // still more code } while ( false );
Wer solchen Code schreibt (egal ob mit goto oder break), der hat sowieso keine Ahnung wie man Programme ordentlich strukturiert.
-
abc.w schrieb:
Ja, man sollte aber noch eine solche Kette von "if-else if" mit einem "else" abschließen
. Es gibt, glaube ich, eine MISRA Regel dazu...
kommt drauf an, was es bedeutet oder ob es überhaupt eine rolle spielt, wenn keine der bedingungen zutrifft. irgendwelche regeln, die immer else-zweige vorschreiben (die dann meistens leer sind), finde ich eher kontaproduktiv.
abc.w schrieb:
;fricky schrieb:
MISRA-regeln sind aber trotzdem ziemlicher blödsinn.
Nein.
[/quote]
ok, wenn absolute noobs programmieren, mag MISRA sie vor den schlimmsten fehlern bewahren. aber einen, der schon etwas besser programmieren kann, stört sowas nur.
-
Ich denke, den Noobs bringt es auch nichts. Es sind die Schmuddelkinder, die Schmierfinken, die Frickler und die Forscher, denen Einhalt geboten werden soll, denke ich. Nicht die Tätigkeiten sollen unterbunden werden, sondern die Gruppen, die diesen Tätigkeiten zugeneigt sind, werden vergault.
-
hihi,
MISRA C 2004 seems a step backwards and attempts at compliance with either document are essentially pointless until something is done about improving the wording of the standard and its match with existing experimental data. In its current form, the complexity and noisiness of the rules suggest that only the tool vendors are likely to benefit.
-
volkard schrieb:
DStefan schrieb:
Ich find's ein winzig kleines Bischen besser als goto.
Jetzt ist bei mir aber durch und ich nehme Dich nicht mehr ernst.
Das trifft mich wirklich hart! Ich glaube, ich werde mir einen anderen Nick zulegen.
Andererseits nehme ich natürlich goto-Liebhaber auch nicht ernst.
Stefan.
-
DStefan schrieb:
Andererseits nehme ich natürlich goto-Liebhaber auch nicht ernst.
und was hältste von leuten, die 'goto' angemessen einsetzen, also z.b. da, wo ein direkter sprung zur vereinfachung des codes führt?
-
;fricky schrieb:
DStefan schrieb:
Andererseits nehme ich natürlich goto-Liebhaber auch nicht ernst.
und was hältste von leuten, die 'goto' angemessen einsetzen, also z.b. da, wo ein direkter sprung zur vereinfachung des codes führt?
Nichts. Es gibt keinen angemessenen Einsatz von goto.
Sorry. Ich möchte hier keinen Krieg vom Zaun brechen. Bin halt extrem goto-geschädigt.
Stefan.
-
DStefan schrieb:
Es gibt keinen angemessenen Einsatz von goto.
klar doch. das standardbeispiel: rausspringen aus verschachtelten schleifen, wenn sich im innern herausstellt, dass nichts mehr gemacht werden muss.
DStefan schrieb:
Bin halt extrem goto-geschädigt.
was ist passiert mit dir und 'goto'?
-
;fricky schrieb:
DStefan schrieb:
Es gibt keinen angemessenen Einsatz von goto.
klar doch. das standardbeispiel: rausspringen aus verschachtelten schleifen, wenn sich im innern herausstellt, dass nichts mehr gemacht werden muss.
return gibts sogar in C
-
DrGreenthumb schrieb:
;fricky schrieb:
DStefan schrieb:
Es gibt keinen angemessenen Einsatz von goto.
klar doch. das standardbeispiel: rausspringen aus verschachtelten schleifen, wenn sich im innern herausstellt, dass nichts mehr gemacht werden muss.
return gibts sogar in C
ja und? weisst du denn was return in C macht?
-
DStefan schrieb:
;fricky schrieb:
DStefan schrieb:
Andererseits nehme ich natürlich goto-Liebhaber auch nicht ernst.
und was hältste von leuten, die 'goto' angemessen einsetzen, also z.b. da, wo ein direkter sprung zur vereinfachung des codes führt?
Nichts. Es gibt keinen angemessenen Einsatz von goto.
Sorry. Ich möchte hier keinen Krieg vom Zaun brechen. Bin halt extrem goto-geschädigt.
Du bist offensichtlich leicht geschädigt, ja.
Der "do-while-break" Code ist ist doch wohl offensichtlich 100x schlimmer als jedes "goto". Ganz egal was man von goto hält.
-
;fricky schrieb:
DrGreenthumb schrieb:
;fricky schrieb:
DStefan schrieb:
Es gibt keinen angemessenen Einsatz von goto.
klar doch. das standardbeispiel: rausspringen aus verschachtelten schleifen, wenn sich im innern herausstellt, dass nichts mehr gemacht werden muss.
return gibts sogar in C
ja und? weisst du denn was return in C macht?
ja.
wenn dir der runtime-overhead zu viel ist, ist das eher ein spezialfall.
-
Ich sehe da zwei verschiedene Aussagen.
Es gibt keinen angemessenen Einsatz von goto.
Jup. Für C++ mag das stimmen.
Ich find's ein winzig kleines Bischen besser als goto.
Nee, der Schleifenzombi ist doch zu abartig. Vermutlich kann man in echtem Code aber dafür sorgen, daß man weder goto noch den Zombi hat.
-
volkard schrieb:
Ich sehe da zwei verschiedene Aussagen.
Es gibt keinen angemessenen Einsatz von goto.
Jup. Für C++ mag das stimmen.
in C++ tritt man 'ne exception los und fängt sie dahinter wieder auf, ne? (ich meine jetzt wenn man aus den verschachtelten schleifen raus will).
-
;fricky schrieb:
volkard schrieb:
Ich sehe da zwei verschiedene Aussagen.
Es gibt keinen angemessenen Einsatz von goto.
Jup. Für C++ mag das stimmen.
in C++ tritt man 'ne exception los und fängt sie dahinter wieder auf, ne? (ich meine jetzt wenn man aus den verschachtelten schleifen raus will).
Nein, das ist eher Java-Stil.
In C++ lagert man die Schleifendinge in Funktionen aus und der Abbruch entsteht genau dann, wenn man das Funktionsergebnis kennt, man kann glaich rausreturnen. Auf close(), free() und solche Aufräumsachen braucht man aber nicht zu achten wegen der Destruktoren, daher ist kein Sprung zum Aufräumblock nötig.
-
volkard schrieb:
In C++ lagert man die Schleifendinge in Funktionen aus und der Abbruch entsteht genau dann, wenn man das Funktionsergebnis kennt, man kann glaich rausreturnen.
selbiges könnteste auch in C machen. ich finde es doof extra eine funktion 'avoid_goto()' zu schreiben, die aus dem einzigen grund da ist, um ein goto zu vermeiden.
also sowas:... for(...) { ... while (...) { ... if (ich_habs_jetzt) goto fertig } } fertig: // anderer wichtiger code ...
^^ ist keine bisschen spaghetti-logik sondern der einfachste und übersichtlichste weg.
volkard schrieb:
Auf close(), free() und solche Aufräumsachen braucht man aber nicht zu achten wegen der Destruktoren, daher ist kein Sprung zum Aufräumblock nötig.
richtig, aber anderen code, der danach drankommen soll, hat man ja auch machmal.
-
;fricky schrieb:
volkard schrieb:
In C++ lagert man die Schleifendinge in Funktionen aus und der Abbruch entsteht genau dann, wenn man das Funktionsergebnis kennt, man kann glaich rausreturnen.
selbiges könnteste auch in C machen. ich finde es doof extra eine funktion 'avoid_goto()' zu schreiben, die aus dem einzigen grund da ist, um ein goto zu vermeiden.
also sowas:... for(...) { ... while (...) { ... if (ich_habs_jetzt) goto fertig } } fertig: // anderer wichtiger code ...
^^ ist keine bisschen spaghetti-logik sondern der einfachste und übersichtlichste weg.
volkard schrieb:
Auf close(), free() und solche Aufräumsachen braucht man aber nicht zu achten wegen der Destruktoren, daher ist kein Sprung zum Aufräumblock nötig.
richtig, aber anderen code, der danach drankommen soll, hat man ja auch machmal.
In echten Fällen hat das Schleifenzeugs eine eigene Bedeutung, um Beispiel wird ein Wert gesucht, dann soll sogar die eigene Bedeutung eine eigene Funktion bekommen.
-
;fricky schrieb:
ich finde es doof extra eine funktion 'avoid_goto()' zu schreiben, die aus dem einzigen grund da ist, um ein goto zu vermeiden.
wenn du die funktion nicht avoid_goto nennen würdest sondern danach, was sie macht, hätte sie zusätzlich auch noch den effekt, den code besser zu dokumentieren.
// ups, letzten beitrag nicht gesehen
-
DrGreenthumb schrieb:
;fricky schrieb:
ich finde es doof extra eine funktion 'avoid_goto()' zu schreiben, die aus dem einzigen grund da ist, um ein goto zu vermeiden.
wenn du die funktion nicht avoid_goto nennen würdest sondern danach, was sie macht, hätte sie zusätzlich auch noch den effekt, den code besser zu dokumentieren.
da habt ihr natürlich recht. trotzdem widerstrebts mir, code der sonst eine einheit darstellt zu zerstückeln, nur um ein harmloses 'goto' zu umgehen. wenn die schleifendurchläufe dokumentationswürdig sind, kann man auch so einen kurzen kommentar hinschreiben. bei so'ner extrahierten anti-goto funktion, brauchste womöglich noch 'nen kommentar wie */* don't call it directly, it's fucking useless /