Además de las otras respuestas bien explicadas con cualquier preocupación secundaria cubierta, me gustaría dar una respuesta precisa y concisa a la pregunta proporcionada.
¿Por qué está printf
obsoleto con un solo argumento (sin especificadores de conversión)?
Una printf
llamada a función con un solo argumento en general no está desaprobada y tampoco tiene vulnerabilidades cuando se usa correctamente, como siempre se codificará.
C Los usuarios de todo el mundo, desde principiantes hasta expertos en estado, utilizan printf
esa forma para dar una frase de texto simple como salida a la consola.
Además, alguien tiene que distinguir si este único argumento es un literal de cadena o un puntero a una cadena, que es válido pero no se usa comúnmente. Para este último, por supuesto, pueden ocurrir salidas inconvenientes o cualquier tipo de comportamiento indefinido , cuando el puntero no está configurado correctamente para apuntar a una cadena válida, pero estas cosas también pueden ocurrir si los especificadores de formato no coinciden con los argumentos respectivos dando múltiples argumentos.
Por supuesto, tampoco es correcto ni apropiado que la cadena, proporcionada como un único argumento, tenga algún formato o especificadores de conversión, ya que no se producirá ninguna conversión.
Dicho esto, dar un literal de cadena simple "Hello World!"
como único argumento sin ningún especificador de formato dentro de esa cadena como lo proporcionó en la pregunta:
printf("Hello World!");
no está obsoleto o es una " mala práctica " en absoluto ni tiene vulnerabilidades.
De hecho, muchos programadores de C comienzan y comenzaron a aprender y usar C o incluso lenguajes de programación en general con ese programa HelloWorld y esta printf
declaración como los primeros de su tipo.
No lo serían si estuvieran en desuso.
En un libro que estoy leyendo, está escrito que printf
con un solo argumento (sin especificadores de conversión) está en desuso.
Bueno, entonces me enfocaría en el libro o en el autor mismo. Si un autor realmente está haciendo, en mi opinión, afirmaciones incorrectas e incluso enseña eso sin explicar explícitamente por qué lo hace (si esas afirmaciones son realmente equivalentes literalmente en ese libro), lo consideraría un libro malo . Un buen libro, a diferencia de eso, explicará por qué evitar cierto tipo de métodos o funciones de programación.
De acuerdo con lo que dije anteriormente, el uso printf
con un solo argumento (una cadena literal) y sin ningún especificador de formato no está en ningún caso desaprobado o considerado como una "mala práctica" .
Debes preguntarle al autor, qué quiso decir con eso o mejor aún, tener en cuenta que aclare o corrija la sección relativa para la próxima edición o impresiones en general.
printf("Hello World!")
es lo mismo queputs("Hello World!")
.puts()
añade un'\n'
. En su lugar, compareprintf("abc")
confputs("abc", stdout)