Of course printf( "%d\n", (any_expr, 257) ); should print "257\n". It is not true that all PCC-based compilers have a problem with this; neither of the ones I normally use does. Even the 4.2BSD PCC gets this right; Sun must have introduced the bug.