Because you're using the pre-processor to create a new language, which we have pretty much agreed is a bad idea.

If you want that level of safety, why not use a language that provides it for you?