Another reason for using cpp -traditional (or a clone thereof) is that it hooks in to autoconf. Now autoconf is pretty ugly inside, but the problem it solves is messy indeed, and someone else has already done it. It's best treated as a black box, and not one we want to re-invent. (Which is another argument for a prosaic clone of cpp -traditional)