Pseudoumfrage :: Semikolon im Makro



  • Bin heute über (sinngemäß) folgendes gestolpert 😮

    #define SUM(__a__,__b__) a+b;
    

    Ich persönlich finde so ein Semikolon im Makro ja übelst. Gibt es tatsächlich ein paar Leute mehr die sowas gerne machen?



  • Frickler gibt es genug. 👍



  • Ist ne unsitte die weg muss.

    das makro sollte auch noch so aussehen

    #define SUM(_a_, _b_) (a+b)
    

    denn dann kann man folgendes machen:

    printf("ergebnis: %i", SUM(1,2)*2);
    

    also finger weg von der ; taste beim makro schreiben 😉



  • Jo, die Klammern habe ich in meinem Schockzustand vergessen. So wie du das *2 :p



  • auch bei als befehle benutzen makros muß man das semikolon wegmachen, damit sie sich normal anfühlen.

    #define enterDebugger() ((char)0=0)
    ok

    #define enterDebugger() (char)0=0;
    falsch wegen
    if(bla())
    enterDebugger();
    else//else abgesperrt durch doppeltes semikolon

    #define enterDebugger {(char)0=0}
    auch falsch aus gleichem grund

    #define enterDebugger() if(true){(char)0=0}else doNothing()
    korrekt, wir gehen davon aus, daß es eine inline void doNoting(){} gibt. so hab ich's ne weile gemacht.

    könnte aber warnug "condition is always true" geben.

    #define enterDebugger() do (char)0=0; while(false)
    korrekt und die aktuelle version, die der gcc benutzt. dort gibt es wenigstes keine blöden warnungen bei diesem konstrukt und es ist noch zu hoffen, daß die anderen compilerbauer auch ein do ... while(false) als dieses idiom erkennen und nicht warnen.



  • Wäre

    #define sum(a,b) ((a)+(b))
    

    Nicht sicherer? bzgl sum(3+x,7+5)

    Und warum sind da diese Underscores? Haben die einen bestimmten zweck?



  • the_menace schrieb:

    Wäre

    #define sum(a,b) ((a)+(b))
    

    Nicht sicherer? bzgl sum(3+x,7+5)

    Und warum sind da diese Underscores? Haben die einen bestimmten zweck?

    weil ich dumm bin.

    vollkommen korrekt deine version.

    bin ausser ueben 😕

    @volkard:
    bei deiner letzten version warnt borland dass funktionen mit schleifen nicht geinlined werden koennen.
    nur so als anmerkung



  • Shade Of Mine schrieb:

    @volkard:
    bei deiner letzten version warnt borland dass funktionen mit schleifen nicht geinlined werden koennen.
    nur so als anmerkung

    eih. mist. ok, es bleibt nix anderes übrig, als ein compilerspezifisches

    #ifdef __GCC__
    #define COMMAND_NEEDING_SEMICOLON(x) do x while(true)
    #else...
    

    zu schreiben.



  • volkard was spricht gegen ((void)0) am Schluß??



  • ????????????????? schrieb:

    volkard was spricht gegen ((void)0) am Schluß??

    normalerweise hüpft man mit __asm int 3; in den debugger. das ist kein ausdruck mehr und deshalb ensteht das problem erst. das _asm int 3; kann auch nicht in einer funktion verpackt werden, weil sonst der debugger in die funktion springt statt genau auf die zeile, wo das makro steht.


Anmelden zum Antworten