Hacker News new | past | comments | ask | show | jobs | submit login

The core idea of the C preprocessor is relatively simple. But it has very complex effects on the surrounding language.



C preprocessor is one of the worst design decisions in C. They could have made the directive system into brace-and-semicolon grammar and not introduce a second syntax.


You can use an other implementation of preprocessor for C/C++, with more features, e.g. DMS[0], which works with AST, or even PHP or Perl, but you will need to parse code twice, so compilation will be about 2x slower.

[0]: http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html


In C(++), the preprocessing is only way to portably declare directives. All others are vendor-specific. They are working on a common directive and module system now, but it will take at least two more years to be standardised fully.


So just ship you preprocessor with your application/library. Look at cvstrac, for example.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: