But yeah, I'd prefer the if(0) type of elimination.

Some parts of OpenSSL do this, and it seems to work well across a pretty wide variety of platforms/toolchains.

A really important benefit is that you get code syntax-checked as opposed to unused #ifdef branches rotting.  A minor benefit is you don't have ifdef spaghetti around local variables, to avoid "xxx is not used" warnings.