https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89181
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Jonny Grant from comment #4) > a #define before a header, that just looks like bad coding? But allowed by the standard. > A bad programmer > could put #define printf 1.0f as well to really mess things up. No because printf is a reserved name and so that would result in undefined behaviour. But "n" and "pos" (and the other hundreds of parameter names in the standard library clauses) are not reserved names, because there's no reason to standardise parameter names and reserve them for the implementation, because they're not part of the API and the calling code should not be constrained in any way by the choice of parameter names. Again, we don't do it for fun.