I have noticed that a large number of C compilers issue warnings when the conversion specifiers in the format string of the printf/sprintf functions do not match the type or the count of the corresponding arguments.
That seems to me like a conceptual break since C doesn't have built-in functions according to the language specification.
All the compiler should know about printf/sprintf is their prototypes and not their semantics. I know that printf/sprintf are standard C functions, but yet they reside in a separate library, libc, and you have to include stdio.h to import their prototypes.
What many compilers do instead is analyze the format string which could as well be supplied at runtime.
Does the above make sense?