Além das outras respostas bem explicadas com quaisquer questões secundárias abordadas, gostaria de dar uma resposta precisa e concisa à pergunta fornecida.
Por que o uso de printf
um único argumento (sem especificadores de conversão) foi suspenso?
Uma printf
chamada de função com um único argumento em geral não é obsoleta e também não tem vulnerabilidades quando usada corretamente, pois você sempre deve codificar.
C Usuários em todo o mundo, de iniciante a especialista em status, usam printf
essa forma para fornecer uma frase de texto simples como saída para o console.
Além disso, Alguém tem que distinguir se este único argumento é uma string literal ou um ponteiro para uma string, que é válido, mas normalmente não é usado. Para o último, é claro, podem ocorrer saídas inconvenientes ou qualquer tipo de comportamento indefinido , quando o ponteiro não está definido corretamente para apontar para uma string válida, mas essas coisas também podem ocorrer se os especificadores de formato não corresponderem aos respectivos argumentos, fornecendo vários argumentos.
Obviamente, também não é correto e apropriado que a string, fornecida como um e único argumento, tenha qualquer formato ou especificadores de conversão, uma vez que não haverá conversão.
Dito isso, fornecer um literal de string simples "Hello World!"
como único argumento sem nenhum especificador de formato dentro dessa string, como você forneceu na pergunta:
printf("Hello World!");
não é preterido ou " má prática " nem tem vulnerabilidades.
Na verdade, muitos programadores C começam e começaram a aprender e usar C ou mesmo linguagens de programação em geral com aquele programa HelloWorld e esta printf
instrução como os primeiros de seu tipo.
Eles não seriam isso se fossem descontinuados.
Em um livro que estou lendo, está escrito que printf
com um único argumento (sem especificadores de conversão) está obsoleto.
Bem, então eu colocaria o foco no livro ou no próprio autor. Se um autor está realmente fazendo essas afirmações , na minha opinião, incorretas e até mesmo ensinando isso sem explicar explicitamente por que está fazendo isso (se essas afirmações forem realmente literalmente equivalentes fornecidas naquele livro), eu consideraria um livro ruim . Um bom livro, ao contrário disso, deve explicar por que evitar certos tipos de métodos ou funções de programação.
De acordo com o que eu disse acima, usar printf
com apenas um argumento (uma string literal) e sem quaisquer especificadores de formato não é em nenhum caso descontinuado ou considerado como "má prática" .
Você deve perguntar ao autor o que ele quis dizer com isso ou, melhor ainda, que ele esclareça ou corrija a seção relativa para a próxima edição ou impressões em geral.
printf("Hello World!")
é o mesmo que . anexa a . Em vez disso, compare computs("Hello World!")
puts()
'\n'
printf("abc")
fputs("abc", stdout)