Bad macros are bad. In case the arguments appear twice, you must create an intermediate variable to hold the result. This is also important to ensure that all the arguments are evaluated in the correct order.<p>With a Google Search I found this example that is more clear and has working code (using a GNU C extension): <a href="https://gcc.gnu.org/onlinedocs/cpp/Duplication-of-Side-Effects.html" rel="nofollow">https://gcc.gnu.org/onlinedocs/cpp/Duplication-of-Side-Effec...</a>