Hilfe bei #if - #endif benötigt!



  • Hallo Forum,
    könnt Ihr mir sagen ob das so möglich ist:

    // dieser Teil ist ok:
    if(bedingung)
    // tue irgendwas...funktioniert auch!
    
    // hier mein problem, das Programm springt nie hier rein, geht das überhaupt so wie ich das gemacht habe???
    #if(ZAHL > 1)
        else if(bedingung) // dieses "else if" soll nur ausgeführt werden wenn oben #if zutrifft?!
        {
            // tue irgendwas....
        }
    #endif
    
    // das könnte ich auch machen: else if(bedingung && (ZAHL > 1))
    // dann brauche ich das mit dem #if #endif nicht mehr, aber ich möchte wissen ob das so machbar ist!!! :rolling_eyes:
    

    Danke
    pixel



  • Klar dürfte das funktionieren (zumindest solange der Präprozessor in der Lage ist "ZAHL>1" auszuwerten):

    if(bed)
      {
        //tu was
      }
    #ifdef ZAHL
      else if(bed2)
      {
        //tu was anderes
      }
    #endif
    

    Das wird je nach Existenz von "ZAHL" zu:

    if(bed)
      {
        //tu was
      }
    

    oder

    if(bed)
      {
        //tu was
      }
      else if(bed2)
      {
        //tu was anderes
      }
    

    (und solange beides legaler Code ist, dürftest du damit keine Probleme bekommen)

    PS: Und natürlich solltest du im else if()-Zweig eine andere Bedingung abfragen als im oberen if()



  • Was möchtest Du erreichen? Für mich macht ein else if mit der selben Bedingung keinen Sinn wenn Du bereeits einen if hattest.

    #if/#endif führt dazu das bestimme Codebereiche kompiliert werden oder eben nicht. D.h. während des Kompilierens wird der Ausdruck ausgewertet, den Du angegeben hast und wenn er wahr ist wird der entsprechende Code Abschnitt kompiliert.

    Ansonsten:

    if(bedingung) 
    {
       // tue irgendwas...funktioniert auch! (Bedingung ist wahr)
    
       if (ZAHL > 1) 
       { 
           // tue irgendwas.... (Bedingung ist wahr, und ZAHL > 1)
       } 
    }
    


  • Hallo Martin,
    ich habe noch nie diese Anweisungen verwendet, daher mein Wunsch mehr daruber praktisch zu erfahren, mein Ziel ist das der "else if" Teil nicht immer ausgeführt wird, ich habe natürlich nicht die selben Bedingunge im beiden ifs, eigentlich
    mach ich es so, weil ich das mit dem #if #endif nicht hinbenkommen habe:

    if(bed_1)
    {
        // tue was...
    }
    // hier wollte ich das #if ZAHL > 1 setzen  :( 
    else if(bed_2 [b]&& ZAHL > 1[/b])
    {
        // jetzt wird hier was gemacht nur wenn beide, bed_2 und ZAHL die Bedingung erfüllen
    }
    // und hier #endif
    /*
    ZAHL ist eine int Variable die Werte zwischen 1 und 3 aufnehmen kann(kommen von dem SliderControl)
    

    #if/#endif führt dazu das bestimme Codebereiche kompiliert werden oder eben nicht. D.h. während des Kompilierens wird der Ausdruck ausgewertet, den Du angegeben hast und wenn er wahr ist wird der entsprechende Code Abschnitt kompiliert.

    Momentmal, das heist das dieser Teil zur Laufzeit garnicht realisiertbar ist, denn ZAHL wird bei Programmausführung geändert, nicht beim Kompilieren!!!
    Denn die ZAHL wird mit 1 immer initialisiert, und ist beim Kompilieren nie grösser als 1 , das könnte der Grund sein warum mein Programm nie zur Laufzeit in den else if Teil reingegangen ist, ich probier mal die ZAHL mit 2 zu initialisieren, dann schau ich ob dann das Programm in den #if Teil reinkommt!!!
    Oder sehe ich das jetzt falsch????

    pixel



  • pixel schrieb:

    Momentmal, das heist das dieser Teil zur Laufzeit garnicht realisiertbar ist, denn Zahl wird bei Programmausführung geändert, nicht beim Kompilieren!!!
    Oder sehe ich das jetzt falsch????

    Nein, das siehst du ganz richtig - #if/#else/#endif wird vom PRÄprozessor ausgewertet, bevor dein Quelltext durch den Compiler gejagt wird. Das heißt, das kannst du nur für Bedingungen verwenden, die bereits zur Compilezeit feststehen.

    ~Übrigens bist du mit der Frage im "ANSI C" Board besser aufgehoben~ - *schiebt*



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum ANSI C verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Ok, danke für eure Infos, dann bleibe ich bei meinem:

    else if(bed_2 && ZAHL > 1)
    

    das funktioniert wenigstens 🙂

    Grüsse
    pixel


Log in to reply