hi, Das Müsste doch stimmen: if(UARTChecksum==bTemp) UARTRec=UART_OK; //Hier soll ein Fehler sein else UARTRec=UART_ERROR; doch da kommt folgender Fehler: "Prase Error before else" in der 2. Zeile Wenn ich nun das schreibe: if(UARTChecksum==bTemp) { UARTRec=UART_OK; } else UARTRec=UART_ERROR; ist der Fehler weg. Kann ich nicht wenn nur ein Befehl in einer if-anweisung ist die {} weglassen. Bei "while" gehts und bei "If" eigenlich auch immer. warum da nicht?? lg, Stefan
Hast du vielleicht in dem #define, das für UART_OK zuständig ist, einen syntaktischen Fehler gemacht? Evtl. ein Semikolon dahintergesetzt? Schmittchen.
Kann es sein, daß es so: if(UARTChecksum==bTemp) UARTRec=UART_OK else UARTRec=UART_ERROR; sein muß? Ich kann mich dunkel daran erinnern, daß ich irgendwann bei einem Compiler (keiner Ahnung welcher) das Problem hatte, dass das Semikolon vor der else nicht sein durfte, wenn es nur eine Zeile zwischen if und else war. bin mir nicht sicher, ist nur eine Vermutung.
@BAB: hm, vielleicht hast du recht (hab grad keine Möglichkeit zum Testen). Ich vermute aber eher folgendes: Angenommen Stefan hat UART_OK so definiert (er verräts ja nicht): #define UART_OK 0; dann hätte er im ersten Falle 2 Strichpunkte hintereinander, der erste zu Recht, der zweite wird als "Leerbefehl" (kann man so sagen?) interpretiert und "ignoriert". Durch die umschliessenden Klammern wird daraus eine Einheit. Ohne die Klammern werden daraus ja 2 Befehle, auf die dann das else folgt -> Fehler. Zumal Stefans 2.Posting diese Vermutung bestätigt. Schmittchen. "Ich muss weg".
@Schmittchen Ich vermute, du hast Recht. @AndreasH Wenn ein C-Compiler tatsächlich diesen schwerwiegenden Fehler in der Umsetzung der Standardbefehle aufweist, dann gehört dieser Compiler eindeutig in die Schrittpresse :-( @Stefan Es wäre sicherlich hilfreich, wenn du jeweils die verwendeten defines auch angeben würdest. Grundsätzlich müssen die geschweiften Klammern immer dann angegeben werden, wenn nach einer Einscheidung, egal ob if, for, while oder was auch immer, mehr als eine einzelne Anweisung, also ein sogenannter Block, ausgeführt werden soll. Zwei Strichpunkte hintereinander erzeugen eine leere Anweisung, welche zwar vom Compiler toleriert wird, aber sicherlich nicht beabsichtigt ist. Gruss Christian
Hi, Es Tut mir leid, aber habe nicht drann gedacht, daß es mit den defines was zu tun haben könnte. Natürlich hatte ich: #define UART_OK 0x00; #define UART_ERROR 0xFF; #define UART_CHECKED 0x01; ohne Semikolon ists dann sofort gegangen. Ich bin wiedermal voll am schlauch gestanden. Vielen Dank für eure Hilfe. Frohe Weihnachten Stefan
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.