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'
-
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.