Explanation for assert macro
<p>I couldn't comment on the answer itself, so: about <a href="http://stackoverflow.com/questions/3848590/using-comma-to-prevent-the-need-for-brace-pair/3848622#3848622">Using comma to prevent the need for brace pair</a>  </p>

<pre><code> #define MY_ASSERT(expr) ((expr) || (debugbreak(), 0))
</code></pre>

<blockquote>
  <p>Here debugbreak() returns void, but we still wish to have 0 as an rvalue.</p>
</blockquote>

<p>How does (debugbreak(), 0) work to return 0? I understand that the return value of debugbreak() is discarded and 0 is returned, but debugbreak generates an exception, so how can anything be evaluated afterward? I suppose my question can be generalised to any similar binary operator where the first part being evaluated exits the program.</p>
