Seite 1 von 2
					
				C:Goto
				Verfasst: Di Aug 26, 2008 4:32 pm
				von Xin
				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 ^^
 
			 
			
					
				Re: C:Goto
				Verfasst: Di Aug 26, 2008 5:12 pm
				von aqe89
				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
			 
			
					
				Re: C:Goto
				Verfasst: Di Aug 26, 2008 5:37 pm
				von fat-lobyte
				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;
}
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.
In C++ würde man in diesem Fall Excpetions und objekte, die in ihren Destruktoren die Ressourcen aufräumen (
RAII) verwenden.
 
			 
			
					
				Re: C:Goto
				Verfasst: Di Aug 26, 2008 7:37 pm
				von Xin
				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.
Code: Alles auswählen
void get_info(const char* infilename, struct info_t* info)
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.
 
Das is'n Scherz... oder?
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.
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.
 
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.
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...
 
			 
			
					
				Re: C:Goto
				Verfasst: Di Aug 26, 2008 8:43 pm
				von Dirty Oerti
				Also anstatt den Gotos würde ich halt einfach eine Funktion verwenden, die dass nötige tut.
So zu sagen ein PANIC...
			 
			
					
				Re: C:Goto
				Verfasst: Di Aug 26, 2008 8:46 pm
				von nufan
				Xin hat geschrieben:Es gibt in C++ nur ein Beispiel für Goto und dass ist der Ausbruch aus einer einer verschachtelte Schleife. 
Das könnte man ja auch mit return lösen. Die Schleifen in eine eigene Funktion.
Code: Alles auswählen
void manyloops ()
{
  for (i=0; i<anz1; i++)
  {
    for (j=0; j<anz2; j++)
    {
 
      /*...*/
      if (irgendwas)
        return 0;
        else
          /*...*/
    
    }
  }
}
Oder versteh ich da was falsch?
 
			 
			
					
				Re: C:Goto
				Verfasst: Di Aug 26, 2008 8:53 pm
				von Dirty Oerti
				dani93 hat geschrieben:Xin hat geschrieben:Es gibt in C++ nur ein Beispiel für Goto und dass ist der Ausbruch aus einer einer verschachtelte Schleife. 
Das könnte man ja auch mit return lösen. Die Schleifen in eine eigene Funktion.
Code: Alles auswählen
void manyloops ()
{
  for (i=0; i<anz1; i++)
  {
    for (j=0; j<anz2; j++)
    {
 
      /*...*/
      if (irgendwas)
        return 0;
        else
          /*...*/
    
    }
  }
}
Oder versteh ich da was falsch?
 
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
				Verfasst: Di Aug 26, 2008 9:32 pm
				von nufan
				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..
Wenn wirklich viel in der Schleife passiert, ist das halt schon ein bisschen umständlich...
 
			 
			
					
				Re: C:Goto
				Verfasst: Do Sep 11, 2008 6:39 pm
				von Metamorph
				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.
Gute Idee. Habe gerade ein Beispiel eingesetzt. Es war sogar ein bischen schwierig, solch einen Chaoscode zu schreiben. ^^
 
			 
			
					
				Re: C:Goto
				Verfasst: Do Sep 11, 2008 9:06 pm
				von Kerli
				Metamorph hat geschrieben: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.
Gute Idee. Habe gerade ein Beispiel eingesetzt. Es war sogar ein bischen schwierig, solch einen Chaoscode zu schreiben. ^^
 
Ich hoffe ich muss so einen Code in keinem ernst gemeinten Programm lesen. Der ist ja absolut grauenhaft 
