Der GNU c preprocessor



  • Hallo

    ich weiß nicht mehr, ob ich schon mal folgende Frage gestellt habe (hab jedenfalls nicht gefunden).

    Ich habe ein Konfigurationsskript geschrieben, welches mir eine Datei autoconf.h generier. Die sieht so aus

    ...
    #ifndef CONFIG_ARCH
      #define CONFIG_ARCH arm
    #endif
    
    #ifndef CONFIG_CPU
      #define CONFIG_CPU pxa
    #endif
    
    #ifndef CONFIG_SBADDR
      #define CONFIG_SBADDR 0xa1000000
    #endif
    
    #ifndef CONFIG_SCHEDULE
      #define CONFIG_SCHEDULE edf
    #endif
    
    #ifndef DRIVER_SERIAL
      #define DRIVER_SERIAL y
    #endif
    
    #ifndef DRIVER_OSTIMER
      #define DRIVER_OSTIMER y
    #endif
    ...
    

    Nun möchte ich bestimmten Code abhängig von CONFIG_SCHEDULE schreiben (eher andere Makros definieren), also da 'edf' kein konstanter numerischer Wert ist, scheint mit #if nicht so richtig zu gehen

    #if CONFIG_SCHEDULE==edf
      #define  SAMPLE1 1
    #elif CONFIG_SCHEDULE==fifo
      #define SAMPLE2 2
    #endif
    

    aber egal welchen Wert CONFIG_SCHEDULE hat, die Expression "CONFIG_SCHEDULE==edf" liefert mir true. Ich hab die GCC Doku dazu gelesen und dort steht

    Character constants, which are interpreted as they would be in normal code.

    Demnach wäre es möglch, oder habe ich etwas falsch verstanden?

    Grüße
    Pablo



  • #define EDF 123
    #define FIFO 456

    #if CONFIG_SCHEDULE == EDF

    #endif

    char constants sind 'c'



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • c.rackwitz schrieb:

    #define EDF 123
    #define FIFO 456

    #if CONFIG_SCHEDULE == EDF

    #endif

    char constants sind 'c'

    wow super, danke. Mir ist jetzt klar, was da passiert, aber ich wäre selber nicht drauf gekommen 😡



  • ruf mal (bei der GCC (g++) gehts auf jeden fall) del Compiler mit -E auf, dann bekommst du den code nach der präprozessorverarbeitung aber noch unkompiliert heraus, kann schon helfen den zu verstehen.


Anmelden zum Antworten