Aren't you talking about how expressions are evaluated in #if there? An expression form that shows up in a macro that is then embedded in normal C code just becomes part of the C code that could potentially get evaluated with C rules at compile time; it's not inherently evaluated at preprocessor time.