Will gcc catch that? The GCC compiler knows about "printf" as a special case.
But "Serial.printf" may not have a definition with the annotation GCC needs to check parameters.
Since it's using the String class, this is likely not being compiled by avr-gcc. Or at least I hope OP isn't being so masochistic as to try to use String on a Mega328.