que - ¿Llamar a printf con exceso de argumentos es un comportamiento indefinido?
printf en c (2)
Me pregunto si esto se traduce en un comportamiento indefinido:
printf("Test %d %s", 123, "abc", "def", "ghi");
Los primeros dos argumentos después de la cadena de formato coinciden con la cadena de formato, por lo que están bien; pero los argumentos 3 y 4 están en exceso porque no hay más especificadores de formato correspondientes.
IMHO printf()
simplemente debería ignorar estos argumentos excesivos y no debería haber UB. ¿Es esto correcto?
Básicamente, printf (o cualquier función de formato) buscará solo ''n'' número de% d,% c,% f ..., etc. en la cadena de formato del argumento de lista de variables. Otros simplemente son ignorados.
Sí, este escenario está explícitamente definido por el estándar. No es un comportamiento indefinido.
Para citar el estándar C11
, capítulo §7.21.6.1, La función fprintf()
[...] Si el formato se agota mientras permanecen los argumentos, los argumentos en exceso se evalúan (como siempre), pero de lo contrario se ignoran [...]