Hacker News new | past | comments | ask | show | jobs | submit login

do { ... } while (0) makes your macro behave like a statement (i.e. the semicolon is mandatory)



Yes. I don't include the trailing semicolon in macro definitions, because I expect the macro to be followed by them:

    MACRO(foo);


({ ... }) does this too. (Is this GCC-specific?)


That is a gcc extension. The construct as a whole has the value of the last statement executed within. Usually an inline function is preferable since it achieves the same thing using only standard syntax.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: