Consider the following lines:
There are two parsers at work here: first, the C compiler, that will parse the C file and basically ignore the content of the string (though modern C compilers will parse the string as well to help catch bad format strings — mismatches between the
% conversion specifier and the corresponding argument passed to
printf() to be converted).
The next parser is the string format parser built into the C runtime library. This will be called at runtime to parse the format string when you call
printf. This parser is of course very simple in comparison.
I have not checked, but I would guess that the C compilers that help checking for bad format strings will implement a
printf-like parser as a post-processing step (i.e. using its own lexer).