do{}while(false); -- ein besseres goto?
-
Stilist schrieb:
Sagen wir, es liegt eine Situation vor, wo gotos Sinn machen.
Daran muß ich nicht glauben. Konkrete Fragen wie ist A oder B besser, kann man zu beantworten versuchen. Aber generelle Aussagen?
Stilist schrieb:
Ist diese Form besser lesbar, oder hat man dies hier nur obfuskiert, um einer Suche nach goto keine Treffer zu schenken?
Kann sein, daß man Software-Metriker veralbern will. Kann sein, daß der Chef bei goto regelrecht ausflippt, statt nachzudenken, ob's tatsächlich ok war. Aber für am wahrscheinlichsten halte ich es, daß der Programmierer lieber an was glaubt, als selber nachzudenken, und er glaubt halt, goto sei Teufelswerk.
-
Vielleicht sollte man noch erwähnen, dass es MISRA Regeln gibt, die besagen:
The goto statement shall not be used.
The continue statement shall not be used.
The break statement shall not be used (except to terminate the cases of a switch statement).
Als Erklärung steht da:These three rules are in the interests of good structured programming.
Und was mir gerade zu "except to terminate the cases of a switch statement" einfällt, wenn man's unbedingt will, kann man's ja komplett ohne break machen:switch (a) { case 0: { ...; } if (false) case 1: { ...; } if (false) case 2: { ...; } if (false) ... }
-
abc.w schrieb:
The goto statement shall not be used.
The continue statement shall not be used.
The break statement shall not be used (except to terminate the cases of a switch statement).
Als Erklärung steht da:These three rules are in the interests of good structured programming.
Das kann nichts taugen, wenn sich Regeln und die Erklärung schon widersprechen
-
abc.w schrieb:
Vielleicht sollte man noch erwähnen, dass es MISRA Regeln gibt
Ja, aber außer in der Automobilindustrie glaubt man nicht an sie. Zu recht, wie ich finde.
-
Ja, aber vielleicht ließe sich mit diesen Regeln der Code des Thread-Erstellers vermeiden...
-
volkard schrieb:
abc.w schrieb:
Vielleicht sollte man noch erwähnen, dass es MISRA Regeln gibt
Ja, aber außer in der Automobilindustrie glaubt man nicht an sie.
*lach*
-
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. MISRA-regeln sind aber trotzdem ziemlicher blödsinn.
-
;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.