Beinhaltet "SWITCH"-Anweisung verkappte GOTOs?
-
Nennt sich glaub ich Jump-Table. Aber was gibts da zu diskutieren?
-
Na, es wird doch überall gepredigt, dass man keine Gotos verwenden soll. Indirekt macht man das ja dann aber doch
-
lol, das läßt sich ja wohl indirekt nicht vermeiden.
-
ich glaub f98 ist nur eingeschnappt weil er vorhin damit so abgebügelt wurde
-
F98: Dann solltest du dir mal den Assembleroutput der if..else, for, do..while, while, break, continue, return Anweisungen angucken. Oder der ?:, && und || Operatoren. Das Predigen (gutes Wort in dem Zusammenhang) gegen GOTO richtet sich nur gegen GOTO im Programmquelltext.
-
Richtig, ich wollte nur mal etwas Bestätigung erhaschen ...
Genau, JMPs ohne Ende ...
[ Dieser Beitrag wurde am 18.02.2003 um 14:14 Uhr von F98 editiert. ]
-
der schuss ging wohl nach hinten los
-
</Diskussion>[ Dieser Beitrag wurde am 18.02.2003 um 14:15 Uhr von F98 editiert. ]
-
das das c/c++ switch ein verkaptes goto ist merkt man nicht nur auf asm ebene z.b. duff device und ein case zweig hat auch was von ein gotolabel
[ Dieser Beitrag wurde am 18.02.2003 um 14:25 Uhr von Dimah editiert. ]
-
im prinzip könnte man auch goto's verwenden wenn man sie genauso anwenden würde wie schleifen, switches etc. es intern machen, nur die gefahr des misbrauchs ist hoch
-
GOTOS sind verboten für Aufrufe von Unterroutinen.
eine Switch - Anweisung ist aber keine Unterroutine.
Mal abgesehen davon ist dieses GOTO zwar ein JMP, nicht jedes JMP/NE/AE/.. ist aber zwangsläufig ein Goto.Die strukturierte Programmierung ist ein System für Hochsprachen, nicht aber für die Maschine selber. Es soll die Programmierung/Wartung des Quellcodes einfacher machen. Der Assemblercode ist dabei irrelevant, da der Programmierer ihn nicht sieht, bzw. sich nicht darum kümmern muss.
(Man kann zwar weitestgehen versuchen, die Strukturierung in Assembler durchzuhalten, wird aber damit nicht lange durchhalten können..)cYa
DjREdit: Fast vergessen. Ein CALL ist (in der hartverdrahtung der cpu) nichts weiter als ein JMP, nur dass die Rücksprungadresse vorher auf dem STACK landet.
[ Dieser Beitrag wurde am 18.02.2003 um 16:38 Uhr von DocJunioR editiert. ]
-
Jumps werden halt in ASM benutzt. Dort gibts nich so komfortables zeug wie bei c++. das heißt nicht dass des nicht saubver ist in ASM Jumps zu benutzen, man kommt eigentlich gar nicht drum rum.