Weil es so ruhig ist eine theoretische Frage



  • Bei "else(bedingung);" ist schon die Klammer möglicherweise falsch.

    Oder meintest du diese Konstruktion?

    if(irgendwas);
      mache_dies();
    else
      mache_was_anderes();
    

    Hier hast du den Fehler, daß (erstens) zum if() nur die nächste Anweisung gehört und (zweitens) das else nur direkt hinter dem zugehörigen if() stehen darf. Das Semikolon steht für eine leere Anweisung und dadurch ist das anschließende mache_dies(); eine völlig eigenständige Anweisung, die die Verbindung zwischen if und else unterbricht.



  • else(bedingung);

    Da ist das Semicolon nicht falsch, der Kompiler erwartet eine geschweifte Klammer.



  • proggingmania schrieb:

    else(bedingung);

    Da ist das Semicolon nicht falsch, der Kompiler erwartet eine geschweifte Klammer.

    Nein, eine Anweisung. Selbstverständlich ist (bedingung) auch eine Anweisung, wenn auch praktisch nicht besonders sinnvoll.



  • Bitte Beitrag ignorieren

    else(bedingung) ist ein Syntax Fehler, denn nach else erwartet man keine Bedingung (sonst hieße es nicht else!) sondern einen Codeblock/Anweisung.

    Das ist natürlich möglich

    void foo()
    {
        int z;
        if(z);
        else;
    }
    


  • supertux schrieb:

    else(bedingung) ist ein Syntax Fehler, denn nach else erwartet man keine Bedingung (sonst hieße es nicht else!) sondern einen Codeblock/Anweisung.

    Eine Bedingung IST eine Anweisung.



  • Bashar schrieb:

    Eine Bedingung IST eine Anweisung.

    ups 🙄 da hab ich mein Hirn ausgeschaltet, du hast Recht.



  • Bashar schrieb:

    Nein, eine Anweisung.

    else(bedingung) oder else(anweisung) ist das gleiche wie else(hü) oder else(hüpf), denn der Compiler kommt weder dazu zu hün noch dazu zu hüpfen und verabschiedet sich mit error: 'Geschweifte Klammer erwartet'
    😃


  • Mod

    proggingmania schrieb:

    Bashar schrieb:

    Nein, eine Anweisung.

    else(bedingung) oder else(anweisung) ist das gleiche wie else(hü) oder else(hüpf), denn der Compiler kommt weder dazu zu hün noch dazu zu hüpfen und verabschiedet sich mit error: 'Geschweifte Klammer erwartet'
    😃

    und von welcher grabungsstätte hast du diesen steinzeitcompiler her? Erwartet wird irgendeine anweisung. und wenn diese mit runder klammer begiunnt, kann es sich nur eben nur um einen ausdruck handeln (expression statement), der mit einem semikolon abgeschlossen werden muss.



  • das ist ein troll, der WILL streiten.



  • Naja Troll hin oder her...

    Ich glaub ich hab mich bei der Fragestellung verwurschtelt. *hihi* 😃

    Codefrag:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char* argv[])
    {
        if(1)
        {
            printf("lala");
        }
        else(1)
        {
            printf("alal");
        }
    
        system("PAUSE");
        return 0;
    }
    

    Erzeugt den Fehler wegen dem ich frage.
    PS.: Hab gar nicht mit so einer enormen Reaktion gerechnet 🙂 🙂



  • Jetzt ist es natürlich auch syntaktisch falsch (vorher nur inhaltlich). Was willst du denn mit der (1) hinter dem else erreichen? Meinst du vielleicht sowas wie else if(bedingung) ...?



  • else erwartet ganz einfach keine eigene Bedingung, sondern nur eine auszuführende Anweisung - also wird das (1) als "Expression Statement" interpretiert und der Compiler beschwert sich zu recht darüber, daß zwischen dieser und der nächsten Anweisung (die Block-Anweisung "{printf("alal");}) ein Semikolon fehlt.



  • @bashar
    Ja es ist halt ein dummes Bsp.....
    _________________________________________________________________________
    ....else erwartet also keine Bedingung sondern gleich eine Anweisung...



  • Kuh-Gel-Schrei-Bär schrieb:

    ....else erwartet also keine Bedingung sondern gleich eine Anweisung...

    richtig, weil die bedingung für 'else', aber negiert, schon in dem dazugehörigen 'if' steckt, braucht man's nicht doppelt hinzuschreiben.



  • CStoll schrieb:

    ...und der Compiler beschwert sich zu recht darüber, daß zwischen dieser und der nächsten Anweisung (die Block-Anweisung "{printf("alal");}) ein Semikolon fehlt.

    Na wer hätte das gedacht.


Anmelden zum Antworten