Dedies-Board (https://www.dedies-board.de/wbb2/index.php)
- Software (https://www.dedies-board.de/wbb2/board.php?boardid=15)
-- Software allgemein (https://www.dedies-board.de/wbb2/board.php?boardid=20)
--- Ulkiges aus C# (https://www.dedies-board.de/wbb2/thread.php?threadid=2777)
Geschrieben von Vimes am 15.09.2011 um 21:57:
Ulkiges aus C#
N Abend,
nach langer Pause habe ich mich dazu aufgerafft, einen C#-Programmierkurs mal wieder aufnzunehmen - ehe er verfällt, bezahlt ist er schon ...
Auf jeden Fall ist mir da gerade was lustiges aufgefallen. Der Tutor amüsierte sich darüber, daß man in C# tatsächlich das Relikt "Goto" implementiert hat.
Wenige Seiten später stellt er den Switch-Befehl vor, der gegenüber reinem C einen entscheidenden Nachteil hat: das weglassen von break; am Ende ist nicht mehr erlaubt und daher ein "fallthrough" durch die Ebenen nicht möglich:
Case 1:
// Tu irgendwas
break;
Case 2:
// Tu noch was
default:
// Tu das letzte
break;
Im obigen Falle wäre nach Abarbeitung des Falles 2 automatisch noch der Default-Fall abgearbeitet worden, weil das break; fehlte. Bei C# ist das nicht mehr möglich.
Soweit. Und jetzt kommts: Den fallthrough kann man dann mit ... einen Trommelwirbel bitte! - GOTO machen!! Ich schmeiß mich weg ...
MfG
Vimes
Geschrieben von Haui am 17.09.2011 um 22:48:
Ich hab diese strikte Ablehnung von Gotos, auf die man doch recht häufig trifft nie verstanden. Klar, Gotos zu verwenden um Schleifen nachzubauen ist Blödsinn, aber manche Dinge lassen sich damit einfach schöner schreiben als auf andere Weise. So sind Gotos in C imho immer noch die schönste Variante um auf verschachtelten Schleifen herauszuspringen. In Java kann man dafür Schleifenlabels vergeben, aber ob ich nun ein goto out oder break out schreiben ist doch prinzipiell egal. Ist halt so wie bei sehr vielen Sprachfeatures, man kann sich sinnvoll verwenden oder eben missbrauchen um krudes Zeug zu machen....
Geschrieben von Vimes am 21.09.2011 um 19:46:
Da bin ich ganz bei Dir. Ich hab mich auch nur darüber amüsiert, daß zuerst die Beibehaltung von Goto als unverständlich gerügt und anschließend in einem Beispiel eben das geschmähte Goto als notwendiges Feature vorgestellt wird. *g*
MfG
Vimes
Geschrieben von Haui am 28.09.2011 um 19:07:
Weil mir das immer zum Thema gotos einfällt und ich gelernt hab dass man das nicht machen soll, hier ein kleines Beispiel zum Missbrauch von gotos (funktioniert zumindest mit dem GCC, da der das
unterstützt)
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
|
#include <stdio.h>
#include <stdlib.h>
void (*volatile f)();
void (*volatile g)();
void funcA(){
printf("A1\n");
f = &&l1; goto *g;
l1: printf("A2\n");
f = &&l2; goto *g;
l2:
goto *g;
}
void funcB(){
printf("B1\n");
g = &&r1; goto *f;
r1: printf("B2\n");
g = &&r2; goto *f;
r2: exit(0);
}
int main(){
f = funcA;
g = funcB;
f();
}
|
|