Volkard



  • @Jockelx sagte in Volkard:

    Wildes spekulieren, was Volkard jetzt macht?

    Da halte ich mich ganz an Dieter Nuhr.

    @It0101 sagte in Volkard:

    An denen du dich übrigens gelegentlich auch gern beteiligst.

    Aus Selbstschutz (sonst wird mir das Hirn sauer) und aus Mitgefühl anderen gegenüber wenn mir jemand all zu viel Blödsinn quatscht. Aber meine Hemmschwelle steigt täglich.


  • Gesperrt

    @Wade1234 sagte in Volkard:

    ja das liegt daran, dass goto sinnvoll eingesetzt auch wirklich geschwindigkeitsvorteile bringt,

    Nicht nur das. 'goto' kann eh nicht aus einer Funktion hinaushüpfen. Und da Funktionen eh eine überschaubare Größe haben sollen, ist das Spaghetti-Code-Argument auch nur die Hälfte wert.

    Wer sich vor 'goto' fürchtet, sollte bei 'longjmp' schon fast einen Nervenzusammenbruch kriegen. Weswegen man C++-Codern LongJmp auch als neues Konzept aka. Exceptions verkauft. 🐱



  • @RBS2 sagte in Volkard:

    Weswegen man C++-Codern LongJmp auch als neues Konzept aka. Exceptions verkauft.

    std::longjmp():

    No destructors for automatic objects are called. If replacing of std::longjmp with throw and setjmp with catch would execute a non-trivial destructor for any automatic object, the behavior of such std::longjmp is undefined.

    <°)))><(


  • Gesperrt

    @Swordfish sagte in Volkard:

    @RBS2 sagte in Volkard:

    Weswegen man C++-Codern LongJmp auch als neues Konzept aka. Exceptions verkauft.

    std::longjmp():

    No destructors for automatic objects are called. If replacing of std::longjmp with throw and setjmp with catch would execute a non-trivial destructor for any automatic object, the behavior of such std::longjmp is undefined.

    <°)))><(

    Ihr C++-Würstchen habt immer mit sehr viel Undefined zu kämpfen. Mag durchaus daran liegen, dass eure Sprache mit der heißen Nadel gestrickt wurde.

    Apropos Volkard: auf C++ ließ er nichts kommen. Ein echter Ehrenmann!



  • @RBS2 sagte in Volkard:

    Ihr habt immer mit sehr viel Undefined zu kämpfen. Mag durchaus daran liegen, dass eure Sprache mit der heißen Nadel gestrickt wurde.

    Liegt eher daran, daß wir den ganzen C-Mist mitschleppen müssen.



  • @RBS2 sagte in Volkard:

    Und da Funktionen eh eine überschaubare Größe haben sollen, ist das Spaghetti-Code-Argument auch nur die Hälfte wert.

    hier hast du mal ein beispiel, welches veranschaulichen soll, warum goto nicht verwendet werden sollte:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
         int zahl1, zahl2;
         char rechenoperation;
    	 int ergebnis;
         int rc;
    
         start:
    
    
    	lieserstezahl:
         printf("Bitte geben Sie die 1. Zahl ein: ");
         rc = scanf("%d", &zahl1);
         if(rc != 1)
         {
              goto fehlererstezahl;
         }
    
        printf("\n");
    
    	lieszweitezahl:
        printf("Bitte geben Sie die 2. Zahl ein: ");
        rc = scanf("%d", &zahl2);
        if(rc != 1)
        {
             goto fehlerzweitezahl;
        }
    
        printf("\n");
    
    	liesrechenoperation:
        printf("Bitte geben Sie das Zeichen fuer die Rechenoperation ein: ");
        rc = scanf("%c", &rechenoperation);
        if(rc != 1)
        {
              goto fehlerrechenoperation;
        }
    
        printf("\n");
    
    	if(rechenoperation == '+')
    	{
    		goto plus;
    	}
    	
            if(rechenoperation == '-')
    	{
    		goto minus;
    	}
    	 if(rechenoperation == '*')
    	{
    		goto mal;
    	}
    	 if(rechenoperation == '/')
    	{
    		goto geteilt;
    	}
    
    		goto fehlerrechenoperation;
    
    	
    	fehlererstezahl:
    	printf("\nDie Eingabe fuer die 1. Zahl ist ungueltig.\n");
    	goto lieserstezahl;
    	
    	fehlerzweitezahl:
    	printf("\nDie Eingabe fuer die 2. Zahl ist ungueltig.\n");
    	goto lieszweitezahl;
    
    	fehlerrechenoperation:
    	printf("\nDie Eingabe fuer die Rechenoperation ist ungueltig.\n");
    	goto liesrechenoperation;
    	
    	plus:
    	printf("%d + %d = %d\n\n", zahl1, zahl2, zahl1 + zahl2);
    	goto start;
    	
    	minus:
    	printf("%d - %d = %d\n\n", zahl1, zahl2, zahl1 - zahl2);
    	goto start;
    	
    	mal:
    	printf("%d * %d = %d\n\n", zahl1, zahl2, zahl1 * zahl2);
    	goto start;
    	
    	geteilt:
    	printf("%d / %d = %d\n\n", zahl1, zahl2, zahl1 / zahl2);
    	goto start;	
    	
    	return 0;
    

    und das programm ist noch klein.


  • Gesperrt

    @Wade1234 sagte in Volkard:

    @RBS2 sagte in Volkard:

    Und da Funktionen eh eine überschaubare Größe haben sollen, ist das Spaghetti-Code-Argument auch nur die Hälfte wert.

    hier hast du mal ein beispiel, welches veranschaulichen soll, warum goto nicht verwendet werden sollte:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
         int zahl1, zahl2;
         char rechenoperation;
    	 int ergebnis;
         int rc;
    
         start:
    
    
    	lieserstezahl:
         printf("Bitte geben Sie die 1. Zahl ein: ");
         rc = scanf("%d", &zahl1);
         if(rc != 1)
         {
              goto fehlererstezahl;
         }
    
        printf("\n");
    
    	lieszweitezahl:
        printf("Bitte geben Sie die 2. Zahl ein: ");
        rc = scanf("%d", &zahl2);
        if(rc != 1)
        {
             goto fehlerzweitezahl;
        }
    
        printf("\n");
    
    	liesrechenoperation:
        printf("Bitte geben Sie das Zeichen fuer die Rechenoperation ein: ");
        rc = scanf("%c", &rechenoperation);
        if(rc != 1)
        {
              goto fehlerrechenoperation;
        }
    
        printf("\n");
    
    	if(rechenoperation == '+')
    	{
    		goto plus;
    	}
    	
            if(rechenoperation == '-')
    	{
    		goto minus;
    	}
    	 if(rechenoperation == '*')
    	{
    		goto mal;
    	}
    	 if(rechenoperation == '/')
    	{
    		goto geteilt;
    	}
    
    		goto fehlerrechenoperation;
    
    	
    	fehlererstezahl:
    	printf("\nDie Eingabe fuer die 1. Zahl ist ungueltig.\n");
    	goto lieserstezahl;
    	
    	fehlerzweitezahl:
    	printf("\nDie Eingabe fuer die 2. Zahl ist ungueltig.\n");
    	goto lieszweitezahl;
    
    	fehlerrechenoperation:
    	printf("\nDie Eingabe fuer die Rechenoperation ist ungueltig.\n");
    	goto liesrechenoperation;
    	
    	plus:
    	printf("%d + %d = %d\n\n", zahl1, zahl2, zahl1 + zahl2);
    	goto start;
    	
    	minus:
    	printf("%d - %d = %d\n\n", zahl1, zahl2, zahl1 - zahl2);
    	goto start;
    	
    	mal:
    	printf("%d * %d = %d\n\n", zahl1, zahl2, zahl1 * zahl2);
    	goto start;
    	
    	geteilt:
    	printf("%d / %d = %d\n\n", zahl1, zahl2, zahl1 / zahl2);
    	goto start;	
    	
    	return 0;
    

    und das programm ist noch klein.

    Zerlege dein Programm in Funktionen von nicht mehr als 20 Zeilen. Und du wirst sehen, dass das 'goto' nur noch halb so böse ist.



  • warum sollte ich dann goto verwenden? ein funktionsaufruf ist doch quasi goto.


  • Gesperrt

    @Swordfish sagte in Volkard:

    @RBS2 sagte in Volkard:

    Ihr habt immer mit sehr viel Undefined zu kämpfen. Mag durchaus daran liegen, dass eure Sprache mit der heißen Nadel gestrickt wurde.

    Liegt eher daran, daß wir den ganzen C-Mist mitschleppen müssen.

    Euer Godfather Struppi wollte es so. Nun müsst ihr damit leben. Mein Mitleid hält sich in Grenzen. 🐱


  • Gesperrt

    @Wade1234 sagte in Volkard:

    warum sollte ich dann goto verwenden? ein funktionsaufruf ist doch quasi goto.

    Gosub, wenn schon. 🐱



  • @RBS2 sagte in Volkard:

    Gosub, wenn schon. 🐱

    tut mir leid, ich hab von anfang an eine vernünftige programmiersprache gelernt und kann daher kein basic. 😅


  • Gesperrt

    @Wade1234 sagte in Volkard:

    @RBS2 sagte in Volkard:

    Gosub, wenn schon. 🐱

    tut mir leid, ich hab von anfang an eine vernünftige programmiersprache gelernt und kann daher kein basic. 😅

    Lass dich nicht durch Begriffe verwirren. Das ist ein allgemeines Konzept: https://en.wikipedia.org/wiki/Subroutine

    Eine Programmiersprache, die dir fundamentale Dinge vorenthält, finde ich nicht gut. Welche Sprache war das?



  • naja C......


  • Gesperrt

    @Wade1234 sagte in Volkard:

    naja C......

    Du beschwerst dich ernsthaft über zu viel Abstraktion bei C?



  • nein, aber entweder habe ich ganz gewaltig etwas verpasst, oder in C gibt es den befehl gosub nicht.



  • Volkard hat vor etwa 5-7 Jahren sein Interesse an der Informatik verloren, wenn ich mich richtig erinnere. Er ist auch mitterweile ueber 60. Es gibt viele etablierte Mitglieder mit tausenden von hochwertigen Beitraegen die abgedankt haben: https://www.c-plusplus.net/forum/users?section=sort-posts
    Wir sollten uns mehr darauf konzentrieren, neue Expertenmitglieder hierher zu bringen, anstatt alten nachzuforschen.


  • Gesperrt

    @Wade1234 sagte in Volkard:

    nein, aber entweder habe ich ganz gewaltig etwas verpasst, oder in C gibt es den befehl gosub nicht.

    Du hast wohl eher die Grundlagen der Programmierung verpasst. Soll bei Quereinsteigern vorkommen, die gleich mit 4GL-Sprachen anfangen. Kann man aber nachholen. 🐱
    Zu Unterprogrammen: https://en.wikipedia.org/wiki/Subroutine
    Hat nicht viel mit 'goto' zu tun.



  • können wir uns darauf einigen, dass man sich goto im regelfall sparen kann, weil der compiler jede menge schlaue optimierungen durchführt (vorausgesetzt, man sagt ihm auch, dass er das tun soll), und dass es unübersichtlich ist, wenn man mit goto wild im programm umherspringt?



  • @Wade1234 sagte in Volkard:

    hier hast du mal ein beispiel, welches veranschaulichen soll, warum goto nicht verwendet werden sollte:

    // ...
    

    und das programm ist noch klein.

    Dafuq!? O.o

    #include <stdio.h>
    
    int main(void)
    {
        for (char op = 0; op != 'q';) {
            int zahl[2];
            for (int i = 0; i < 2; ++i) {
                while (printf("\nBitte geben Sie die %d. Zahl ein: ", i + 1), scanf("%d", &zahl[i]) != 1) {
                    fprintf(stderr, "\nDie Eingabe fuer die %d. Zahl ist ungueltig.\n", i + 1);
                    for (int ch; (ch = getchar()) != '\n' && ch != EOF;);
                }
            }
            do {
                printf("\nBitte geben Sie das Zeichen fuer die Rechenoperation ein: ");
                scanf(" %c", &op);
                if (op == '/' && !zahl[1]) fputs("\nDie Division durch 0 ist undefiniert.\n", stderr);
                else if (op == '+') printf("\n%d + %d = %d\n\n", zahl[0], zahl[1], zahl[0] + zahl[1]);
                else if (op == '-') printf("\n%d - %d = %d\n\n", zahl[0], zahl[1], zahl[0] - zahl[1]);
                else if (op == '*') printf("\n%d * %d = %d\n\n", zahl[0], zahl[1], zahl[0] * zahl[1]);
                else if (op == '/') printf("\n%d / %d = %d\n\n", zahl[0], zahl[1], zahl[0] / zahl[1]);
                else if (op != 'q') {
                    fputs("\nDie Eingabe fuer die Rechenoperation ist ungueltig.\n", stderr);
                    for (int ch; (ch = getchar()) != '\n' && ch != EOF;);
                    op = 0;
                }
            } while (!op);
        }
        puts("\nbye!\n");
    }
    


  • @Wade1234 sagte in Volkard:

    können wir uns darauf einigen, dass man sich goto im regelfall sparen kann

    Das muss doch gar nicht diskutiert werden und RBS2 sieht das sowieso nur aus Prinzip anders.
    Voll der crazy-Rebell!


Anmelden zum Antworten