Präprozessorproblem bei Vergleich-Operation



  • Hallo Leute,

    ich hab ein Problem beim Vergleichen von Werten im Präprozessor. Ich beschreib es mal möglichst einfach:

    Ich habe eine Definition "#define HALLO TEXT_001". Nun möchte ich diese im Präprozessor vergleichen, ob sie zufällig den Wert "TEXT_0815" hat. Hier der Code dazu:

    #define HALLO TEXT_001     //Hallo hat den Wert "TEXT_001"
    #if (HALLO == TEXT_0815)   //Überprüfung, ob Hallo den Wert "TEXT_0815" hat
    #define ....
    #endif
    

    Diese Abfrage führt allerdings zu einem Compilerfehler:

    #if (HALLO == TEXT_0815)
         ^
    Error: ")" expected
    

    Also ich wäre um jeden Lösungshinweis dankbar, ich verzweifel nämlich gerade dran. Das Problem tritt übrigens nur dann auf, wenn HALLO einen Wert mit "Unterstrich (_)" besitzt, was sich bei mir aber nicht vermeiden lässt!

    Danke für die Hilfe,
    StoBÄR



  • Ohne Klammern geht's?



  • Underscores in Identifiern sind natürlich erlaubt, daran kann es nicht liegen.

    Wie sind denn TEXT_001 und TEXT_0815 definiert?



  • Gar nicht 🙂

    Kann es sein, dass er einfach nur Vergleiche auf Zahlen machen kann?



  • Was nach #if steht, wird (nachdem Macros ersetzt wurden) wie ein normaler Ausdruck ausgewertet. Strings vergleichen kann man damit also nicht.

    Aber trotzdem seltsam, dass es eine Fehlermeldung gibt. Eigentlich sollte

    #if (HALLO == TEXT_0815)
    

    vom Präprozessor ersetzt werden durch

    #if (TEXT_001 == TEXT_0815)
    

    Und das, wenn TEXT_001 und TEXT_0815 nicht vorher definiert wurden, durch

    #if (0 == 0)
    

    was dann ausgewertet wird zu

    #if 1
    

Anmelden zum Antworten