Ist C (nicht C++) ein strukturierte Programmiersprache?



  • c ist doch die coolste, beste sprache aller zeiten. high-level assembler eben 😋



  • aaaaa schrieb:

    Oder liege ich da ganz falsch?

    Könnte es nicht beschwören, weil ich dazu zu wenig Ahnung habe, aber gilt nicht:

    Strukturen => strukturierte Programmierung 😕

    Wozu ansonsten die Unterscheidung zwischen prozeduraler und str. Prog.?



  • simon.phoenix schrieb:

    Könnte es nicht beschwören, weil ich dazu zu wenig Ahnung habe, aber gilt nicht:

    Strukturen => strukturierte Programmierung 😕

    Nein, Strukturen (im Sinne von struct) haben mit strukturierter Programmierung nur am Rande zu tun, sie sind definitiv nicht Namensgeber.



  • Es heißt strukturierte Programmierung, nicht strukturierte Datierung 😉

    Das hier ist Spaghetticode

    10  PRINT "HALLO WELT"
    20  INPUT "ENDE ?", $i
    30  IF $i <> "yes" GOTO 10
    40  PRINT "BYEBYE"
    

    Die Gotos sind absolut tödlich, weil man beim Einfügen einer einzigen Zeile schauen muss, ob sich nicht bei irgendeinem GOTO was ändert. GOTO gibt es laut Definition auch in C - soll aber nicht genutzt werden. (VB zwingt einen übrigens spätestens beim Exception-Handling wieder zum GOTO)

    Das hier ist strukturiert:

    int ask(void)
    {
        char input[10];
        input[0] = '\n';
        while (strcmp (input, "yes") != 0)
        {
            printf ("Hallo Welt\n Wollen Sie beenden?");
            scanf  ("%s", &input)
        }
    }
    

    rekursiv könnt ich auch noch oder oop, aber das sollen andere machen, ich muss auch arbeiten 😉 🙄



  • DocJunioR schrieb:

    Die Gotos sind absolut tödlich, weil man beim Einfügen einer einzigen Zeile schauen muss, ob sich nicht bei irgendeinem GOTO was ändert.

    deshalb hatten manche alten basics auch einen 'RENUMBER' befehl

    DocJunioR schrieb:

    GOTO gibt es laut Definition auch in C - soll aber nicht genutzt werden.

    bei c ist es ja nicht so schlimm weil man zu labels springt d.h. anpassen von zeilennummern entfällt. manchmal ist goto auch nützlich z.b. wenn man aus tief verschachtelten schleifen raus will etc.



  • goto ist einfach bad style..
    Dass es hier und da vielleicht nützlich sein kann ist was anderes, wobei ich aus tiefen Verschachtelungen auch anders heraus komme..

    Renumber hatten leider nicht alle basics. Wollte auch nur auf den Unterschied hinweisen.



  • Trolling 101: Man stelle eine Frage zur strukturierten Programmierung, der Rest ergibt sich von selbst 🙂



  • Sei froh, dass es nicht wieder eine Diskussion zum Thema Rekursion ist - viele erinnern sich vielleicht noch daran, dass ich ein absoluter Fan derselben bin..



  • DocJunioR schrieb:

    Sei froh, dass es nicht wieder eine Diskussion zum Thema Rekursion ist - viele erinnern sich vielleicht noch daran, dass ich ein absoluter Fan derselben bin..

    Willst du damit die goldene Flamme für die subtilste Art einen Flamewar zu starten bekommen?



  • Ein strukturiertes Pogramm ist imho ein Programm, welches lediglich aus Sequenzen von Anweisungen, Fallunterscheidungen, Schleifen und Methodenaufrufen aufgebaut ist. Zusammengefasst könnte man auch "Programmieren ohne goto" sagen.
    goto ist eine hässliche Sache, aber goto's Bruder, der longjump ist echt cool!!



  • Shade Of Mine schrieb:

    DocJunioR schrieb:

    Sei froh, dass es nicht wieder eine Diskussion zum Thema Rekursion ist - viele erinnern sich vielleicht noch daran, dass ich ein absoluter Fan derselben bin..

    Willst du damit die goldene Flamme für die subtilste Art einen Flamewar zu starten bekommen?

    *gg* erinnert sich ja wirklich noch wer.
    Nein. Ich hab nunmal die dumme Angewohnheit meine Meinung offen darzulegen. Allerdings versuch ich gerade, Grundsatzdiskussionen nur noch in gemütlichem Umfeld bei nem Bier persönlich zu führen..



  • Ok, nochmal zur Ausgangsfrage.

    C++/Java/C# bezeichne ich als objektorientierte Programmiersprachen. Aber wie bezeichne ich C/Pascal ???



  • > Ist C (nicht C++) ein strukturierte Programmiersprache?

    wie schon erwähnt ist C keine strukturierte Programmiersprache, weil sie so "häsliche" Dinge wie gotos/labels/sprungmarken hat

    Pascal ist eine strukturierte Programmiersprache



  • Noobx schrieb:

    Ok, nochmal zur Ausgangsfrage.

    C++/Java/C# bezeichne ich als objektorientierte Programmiersprachen. Aber wie bezeichne ich C/Pascal ???

    imperativ!

    google mal nach Programmierparadigmen.



  • frenten schrieb:

    Noobx schrieb:

    Ok, nochmal zur Ausgangsfrage.

    C++/Java/C# bezeichne ich als objektorientierte Programmiersprachen. Aber wie bezeichne ich C/Pascal ???

    imperativ!

    google mal nach Programmierparadigmen.

    🙂 Jo, danke 👍



  • Vertexwahn schrieb:

    > Ist C (nicht C++) ein strukturierte Programmiersprache?

    wie schon erwähnt ist C keine strukturierte Programmiersprache, weil sie so "häsliche" Dinge wie gotos/labels/sprungmarken hat

    Pascal ist eine strukturierte Programmiersprache

    Hat Pascal auch. Wird da aber mit genauso spitzen Fingern angefasst wie überall sonst auch.



  • Das Problem mit der unstrukturierten Programmierung war nicht das GOTO, IMO, sondern die Tatsache, dass Sprachen wie z.B. BASIC einfach keine Features zur strukturierten Programmierung hatten. Also keine benamten Unterprogramme, keine guten Schleifenkonstruktionen, keine lokale Variablen, usw.

    Man konnte aber in BASIC durchaus auch strukturiert programmieren: Wie der Name schon sagt, muss das Programm Struktur haben.

    Fuer C bedeutet das, dass man Funktionen sauber kapseln muss, d.h. jede Funktion erfuellt einen bestimmten Zweck und hat moeglichst keine Abhaengigkeiten (verwendet also keine globalen Variable, usw.).

    Spruenge in C sind immer lokal, im Gegensatz zum Vorgaenger BCPL oder zu BASIC. D.h. in C kann man mit goto nicht aus einer Funktion herausspringen.

    Es gibt zwar die Konstruktion setjmp()/longjmp(), sie wird aber nur selten verwendet.

    Hier ein paar Beispiele fuer unstrukturierte Anwendungen von GOTO:

    // BCPL
    GOTO 4
    // --------
    GLOBAL $( X:50 $)
    // ...
    X := L
    // ...
    L: A := B
    // ...
    GOTO X
    // ---------
    
    10 REM BASIC
    20 REM ...
    30 GOSUB 50
    40 END
    50 GOTO 70
    60 GOTO 80
    70 IF A > B THEN 60
    80 RETURN
    
    /* C */
    void func( int x ) {
       int a, b;
       a = 5;
       b = 3;
    L2: 
       if ( b == 0 ) return;
       if ( a > x ) goto L1;
       a -= 100; b += 100;
       goto L1;
    L1:
       if ( b < x ) goto L2;
       goto L2;
    }
    

    Jedoch gibt es in C sinnvolle Moeglichkeiten zur Verwendung von GOTO, die die Lesbarkeit (und damit die Strukturierung) des Programmcodes deutlich verbessern. Z.B. wenn es um's Aufraeumen im Fehlerfall geht, da ist GOTO nach wie vor unschlagbar, weil es Code-Wiederholung vermeidet, und dafuer sorgt, dass es nur einen, maximal zwei Funktionsausgaenge gibt.

    bool my_big_5000_line_init( bigobj* obj ) {
       /* ... */
       if ( !super_init_305( obj ) ) goto ERR1;
       if ( !super_init_306( obj ) ) goto ERR2;
       if ( !super_init_307( obj ) ) goto ERR3;
       /* ... */
       if ( !super_init_34872( obj ) ) goto ERR9837;
    
       return true;  /* fertig: Erfolg */
    
    ERR9837: super_cleanup_34871( obj );
             /* ... */
    ERR3:    super_cleanup_306( obj );
    ERR2:    super_cleanup_305( obj );
    ERR1:    return false; /* Fehler */
    }
    

    Diese Schreibweise bildet im Prinzip nach, was unter C++ mit automatischen Konstruktor-/Destruktor-Aufrufen (also auf dem Stack) implementiert ist.

    Die Programmiersprache C gehoert definitiv zur Gruppe der strukturierten Programmiersprachen, wie Pascal, Modula, BCPL, usw.

    C++, Java, Smalltalk usw., gehen noch einen Schritt weiter und gehoeren zur Gruppe der objektorientierten Programmiersprachen.



  • frenten schrieb:

    Noobx schrieb:

    Ok, nochmal zur Ausgangsfrage.

    C++/Java/C# bezeichne ich als objektorientierte Programmiersprachen. Aber wie bezeichne ich C/Pascal ???

    imperativ!

    google mal nach Programmierparadigmen.

    google mal nach Programmierparadigmen.

    Du wirst sehen dass du recht hast, aber das C++/Java/C# genauso imperativ sind.

    C ist eine strukturierte Programmiersprache/unterstützt strukturierte Programmierung.
    3 Seiten - und wahrscheinlich geht's open end weiter - Aufwand für diese simple Feststellung? 🙄


Anmelden zum Antworten