Konstante definieren



  • Wenn man eine Integer Konstante definiert

    #define STATUS_EMPTY -1
    

    sollte man dabei eigentlich immer Klammern drumherum machen wie z.B

    #define STATUS_EMPTY (-1)
    


  • nicht unbedingt, aber nicht schlecht

    #define X 1
    
    void foo()
    {
        int z=X;
    }
    

    Das ist äquivalnent zu

    void foo()
    {
        int z=1;
    }
    

    int z=(1); ist auch nicht falsch, aber da unnötig.

    Klammern bei define sollte man benutzen, wenn man Sachen wie
    int x = a ? X : 7; oder so. Denn da kann unter Umständen zu Problemen führen, wenn es keine Klammern gibt.
    Laut C Grammatik

    conditional_expression
    : logical_or_expression
    | logical_or_expression '?' expression ':' conditional_expression
    ;
    

    und mit expression könnte es Probleme geben.



  • Ich denke dass der PREPROZESSOR schon automatisch Klammern drumherum macht!

    Ganz einfach aus folgendem Beispiel:

    Der folgende Quellcode lässt sich compilieren!!

    #include <stdio.h>
    #define STATUS_EMPTY -1
    
    int main(int argc, char **argv)
    { printf("%d\n", -STATUS_EMPTY);
      return 0;
    }
    

    obwohl wenn man direkt einsetzen würde dann würde ja folgendes rauskommen:

    #include <stdio.h>
    #define STATUS_EMPTY -1
    
    int main(int argc, char **argv)
    { printf("%d\n", --1);
      return 0;
    }
    

    und dieses --1 geht doch nicht weil ich ne eins keine Variable ist also denk ich, dass er schon automatisch immer KLammern drumherum macht, was daraus ein -(-1) mach was ja wieder erlaubt ist.



  • Georgius schrieb:

    Ich denke dass der PREPROZESSOR schon automatisch Klammern drumherum macht!

    Nein.

    und dieses --1 geht doch nicht weil ich ne eins keine Variable ist also denk ich, dass er schon automatisch immer KLammern drumherum macht, was daraus ein -(-1) mach was ja wieder erlaubt ist.

    Nein. - und STATUS_EMPTY sind zwei Präprozessor-Tokens. Unterschiedliche Präprozessor-Tokens sind auch automatisch unterschiedliche Tokens, also werden --1 drei Tokens, als hättest Du - - 1 geschrieben.



  • was ist denn schöner:
    Variante a: #define STATUS_EMPTY -1
    Variante b: Konstanten in einem eigenen header zB constants.h zu definieren, like: const short STATUS_EMPTY = -1;
    Bitte abstimmen (am besten mit einer Begründung), thanx'


Anmelden zum Antworten