(void)0 Cast im Assert-Makro



  • Hi,

    folgendes ist aus dem assert.h Header von Visual C++ 2003

    #ifdef  NDEBUG
    #define assert(exp)     ((void)0)
    #else
    #define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )
    #endif  /* NDEBUG */
    

    Wofür ist diese 0 und der Cast nach void in den Makros verantwortlich?
    Ist die 0 dafür da ein Semikolon zu erzwingen? Wenn ja, dann ergäbe das ja Sinn. Aber wofür noch der Cast nach void?



  • Ist die 0 dafür da ein Semikolon zu erzwingen?

    Ja

    Aber wofür noch der Cast nach void?

    Um das zu verhindern:

    void foo(int);
    //...
    foo(assert(...));
    

Anmelden zum Antworten