#if #else #endif verursacht Fehlermeldung

Gast #179376
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...
Gast
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.
Gast
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.
Gast
@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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.