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



  • 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