Newer languages like Java lack a preprocessor like C has. The
#ifdef AAP is replaced by
cpp has more to offer than conditional code. A preprocessor is a domain specific language for symbol manipulation that can also offer meta programming and language alterations. The
__LINE__ directive is an example of the former. Below an example of the latter:
To fully use a preprocessor, a coder needs to be uber-flexible. Only a few are. Hence the frustration with languages like M4 or the expansion delay effect of
&& in the SAS macro language. Some preprocessors were added out of necessity. Just imagine writing 10 KLOC of assembler without using a preprocessor. To quote Al Bundy, I’d rather bait a crocodile with my manhood.