The preprocessor performs two main tasks: Handling preprocessor directives and expanding macros. Trying to do both simultaneously can be
problematic: when a macro argument contains something that could be interpreted as a preprocessor directive, the behavior is undefined.