C:Goto
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
C:Goto
Ich sah grade C:Goto, aber keinen Diskussionsthread dazu.
Taktisch klug vom Autor, aber ich glaube, hier besteht Diskussionsbedarf... ich würde jedenfalls gerne den Artikel diskutieren ^^
Taktisch klug vom Autor, aber ich glaube, hier besteht Diskussionsbedarf... ich würde jedenfalls gerne den Artikel diskutieren ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: C:Goto
Am besten wäre es wenn es ein Beispiel mit "goto" hätte und dazu wird dann demonstriert wie man es besser lösen könnte. mit einer wirklichen schleife.
Ich finde es gut das goto erwähnt wird. Der Text ist auch so geschrieben das Anfänger nicht gleich alles mit goto machen.
Obwohl ich weiss nicht wo man goto gebrauchen könnte, bis jetzt habe ich es immer anders geschaft.
mehr kann und will ich in diesem Augenbick nicht sagen.
grues aqe89
Ich finde es gut das goto erwähnt wird. Der Text ist auch so geschrieben das Anfänger nicht gleich alles mit goto machen.
Obwohl ich weiss nicht wo man goto gebrauchen könnte, bis jetzt habe ich es immer anders geschaft.
mehr kann und will ich in diesem Augenbick nicht sagen.
grues aqe89
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: C:Goto
aqe89 hat geschrieben:Obwohl ich weiss nicht wo man goto gebrauchen könnte, bis jetzt habe ich es immer anders geschaft.
Code: Alles auswählen
void get_info(const char* infilename, struct info_t* info)
{
int ret;
char* errmsg = NULL;
FILE* infile = fopen(infilename, "rt");
if ( infile == NULL )
{
errmsg = strerror(errno);
goto stopfunction;
}
ret = fscanf(infile, "Name: %s\n", &(info->name));
if (ret != 1)
{
errmsg = "Invalid File Format!";
goto stopfunction;
}
ret = fscanf(infile, "Adresse: %s\n", &(info->adresse));
if (ret != 1)
{
errmsg = "Invalid File Format!";
goto stopfunction;
}
ret = fscanf(infile, "Kontonummer/BLZ: %d/%d\n", &(info->kontonr), &(info->blz));
if (ret != 2)
{
errmsg = "Invalid File Format!";
goto stopfunction;
}
stopfunction:
set_error(errmsg);
fclose(infile)
return;
}
In C++ würde man in diesem Fall Excpetions und objekte, die in ihren Destruktoren die Ressourcen aufräumen (RAII) verwenden.
Haters gonna hate, potatoes gonna potate.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C:Goto
Das is'n Scherz... oder?fat-lobyte hat geschrieben:aqe89 hat geschrieben:Obwohl ich weiss nicht wo man goto gebrauchen könnte, bis jetzt habe ich es immer anders geschaft.Ohne goto müsste man in jedem "if (fehler)" den gleichen code schreiben, und am ende noch einmal. Die Datei muss ja geschlossen werden, koste es was es wolle.Code: Alles auswählen
void get_info(const char* infilename, struct info_t* info)
Das Beispiel ist weit entfernt ein Beispiel für Goto zu sein.
Wer das in einem echten Programm abliefert, möge bitte nicht in meiner Nähe programmieren. Das ist bestenfalls ein Beispiel für schlechte Programmierung.
Exceptions halte ich hier für vollkommen unangebracht, das Problem lässt sich sehr einfach und deutlich Resourcensparender durch eine ganz primitive Technik lösen: Verschachteln.fat-lobyte hat geschrieben: In C++ würde man in diesem Fall Excpetions und objekte, die in ihren Destruktoren die Ressourcen aufräumen (RAII) verwenden.
Das ist nichts anderes als das Goto, aber kontrolliert durch den Compiler, der nur klar definierte Sprünge erlaubt.
Es gibt in C++ nur ein Beispiel für Goto und dass ist der Ausbruch aus einer einer verschachtelte Schleife. Ansonsten gibt es in der normalen Entwicklung keinen mir bekannten Grund, der für ein Goto spricht. Bei Treibern lasse ich hier mit mir reden... eventuell. Aber ansonsten...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: C:Goto
Also anstatt den Gotos würde ich halt einfach eine Funktion verwenden, die dass nötige tut.
So zu sagen ein PANIC...
So zu sagen ein PANIC...
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: C:Goto
Das könnte man ja auch mit return lösen. Die Schleifen in eine eigene Funktion.Xin hat geschrieben:Es gibt in C++ nur ein Beispiel für Goto und dass ist der Ausbruch aus einer einer verschachtelte Schleife.
Code: Alles auswählen
void manyloops ()
{
for (i=0; i<anz1; i++)
{
for (j=0; j<anz2; j++)
{
/*...*/
if (irgendwas)
return 0;
else
/*...*/
}
}
}
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: C:Goto
Müsste man eigentlich auch tun können.dani93 hat geschrieben:Das könnte man ja auch mit return lösen. Die Schleifen in eine eigene Funktion.Xin hat geschrieben:Es gibt in C++ nur ein Beispiel für Goto und dass ist der Ausbruch aus einer einer verschachtelte Schleife.
Oder versteh ich da was falsch?Code: Alles auswählen
void manyloops () { for (i=0; i<anz1; i++) { for (j=0; j<anz2; j++) { /*...*/ if (irgendwas) return 0; else /*...*/ } } }
Nur musst du dann alles eben an diese Funktion übergeben.
Variablen und Strukturen, die du in den Schleifen brauchst.
Wobei...einfach Zeiger übergeben und fertig..
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: C:Goto
Wenn wirklich viel in der Schleife passiert, ist das halt schon ein bisschen umständlich...Müsste man eigentlich auch tun können.
Nur musst du dann alles eben an diese Funktion übergeben.
Variablen und Strukturen, die du in den Schleifen brauchst.
Wobei...einfach Zeiger übergeben und fertig..
Re: C:Goto
Gute Idee. Habe gerade ein Beispiel eingesetzt. Es war sogar ein bischen schwierig, solch einen Chaoscode zu schreiben. ^^aqe89 hat geschrieben:Am besten wäre es wenn es ein Beispiel mit "goto" hätte und dazu wird dann demonstriert wie man es besser lösen könnte. mit einer wirklichen schleife.
Re: C:Goto
Ich hoffe ich muss so einen Code in keinem ernst gemeinten Programm lesen. Der ist ja absolut grauenhaftMetamorph hat geschrieben:Gute Idee. Habe gerade ein Beispiel eingesetzt. Es war sogar ein bischen schwierig, solch einen Chaoscode zu schreiben. ^^aqe89 hat geschrieben:Am besten wäre es wenn es ein Beispiel mit "goto" hätte und dazu wird dann demonstriert wie man es besser lösen könnte. mit einer wirklichen schleife.

"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at