www.mikrocontroller.net

Forum: Compiler & IDEs If-Anweisung


Autor: Stefan_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du vielleicht in dem #define, das für UART_OK zuständig ist, einen 
syntaktischen Fehler gemacht? Evtl. ein Semikolon dahintergesetzt?

Schmittchen.

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann müssten meiner meinung nach beide sachen nicht gehen...

Autor: AndreasH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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".

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Stefan_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.