www.mikrocontroller.net

Forum: Compiler & IDEs #if #else #endif verursacht Fehlermeldung


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe (wieder mal) Probleme mit dem NC30 Compiler von Renesas:
In einem Gerät werden 2 verschiedene LCDs verbaut, mit dem Unterschied
dass bei einem das Bild gespiegelt wird. Das möchte ich gerne mit
#define Mirror 0 (bzw. 1)
lösen.

Leider hat der Compiler aber was dagegen:

void Rotate (char Wert)
    {if (Wert==0)
        {#if Mirror==1
            SendCom(161);     //H-Mirror ON   Normal
         #else
            SendCom(160);     //H-Mirror OFF
         #endif
         SendCom (196);        //V-Mirror OFF
        }
     else
        {#if (Mirror==1)
            SendCom(160);     //H-Mirror OFF  180° gedreht
         #else
            SendCom(161);     //H-Mirror ON
         #endif

         SendCom (197);     //V-Mirror ON
        }}

Beim Compilen kommt immer dieser Fehler:
[Error(cpp30.53):S1D15712.c, line 309] elif/else sequence error
[Error(cpp30.55):S1D15712.c, line 311] endif sequence error
[Error(cpp30.53):S1D15712.c, line 317] elif/else sequence error
[Error(cpp30.55):S1D15712.c, line 319] endif sequence error

Bin ich zu blöd, oder ist der Compiler einfach scheiße ? Das es nicht
ganz den ANSI Standart erfüllt habe ich auf jedenfall schon gemerkt...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man fragt da so:

#define Mirror 1
//alternativ #define Mirror 0

und dann:

#if mirror
...
#else
...
#endif

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nö, das problem an den beiden zeilen ist die führende geschweifte
klammer.

{#if Mirror==1
{#if (Mirror==1)

ändere das so, dass die #if anweisungen auf einer separaten zeile
stehen.


> Beim Compilen kommt immer dieser Fehler:

diese fehler kommen nicht vom compiler, sondern vom präprozessor. der
erkennt präprozessoranweisungen nur, wenn vor dem # nur whitespaces
stehen. alles andere wird nicht beachtet, deshalb erhältst du auch
keine fehlermeldung bei den #if zeilen.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Benedikt:
"ANSI Standart"

Wie kann man denn nach ANSI-Art stehen?

SCNR

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas
Stimmt, genau daran lag es.
Danke !

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Btw., das Doppelkreuz muss nach Standard in der ersten Spalte stehen,
danach (vor dem define usw.) dürfen Leerzeichen folgen.  GCC's
Präprozessor akzeptiert die Anweisungen zwar auch mit führenden
Leerzeichen, aber das ist nicht vom Standard garantiert.

Autor: ---- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg: Deine kleine Info am Ende ist das Salz in der Suppe dieses
Forums. Nicht wirklich momentan wichtig, aber für's tiefere
Verständnis, bzw. potentielle zukünftige Probleme seehr brauchbar.
Danke.

----, (QuadDash).

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.