Oltre alle altre risposte ben spiegate con tutte le preoccupazioni secondarie trattate, vorrei dare una risposta precisa e concisa alla domanda fornita.
Perché printf
con un singolo argomento (senza specificatori di conversione) è deprecato?
Una printf
chiamata di funzione con un singolo argomento in generale non è deprecata e non presenta vulnerabilità se usata correttamente, come sempre si codifica.
C Gli utenti di tutto il mondo, dallo status principiante all'esperto dello stato usano printf
questo modo per fornire una semplice frase di testo come output alla console.
Inoltre, Qualcuno deve distinguere se questo unico argomento è una stringa letterale o un puntatore a una stringa, che è valida ma comunemente non utilizzata. Per quest'ultimo, ovviamente, possono verificarsi output scomodi o qualsiasi tipo di comportamento indefinito , quando il puntatore non è impostato correttamente per puntare a una stringa valida ma queste cose possono verificarsi anche se gli specificatori di formato non corrispondono ai rispettivi argomenti dando più argomenti.
Naturalmente, non è nemmeno giusto e corretto che la stringa, fornita come unico argomento, abbia specificatori di formato o conversione, poiché non verrà eseguita alcuna conversione.
Detto questo, dare una semplice stringa letterale come "Hello World!"
come unico argomento senza specificatori di formato all'interno di quella stringa come hai fornito nella domanda:
printf("Hello World!");
non è affatto deprecato o " cattiva pratica " né presenta vulnerabilità.
In effetti, molti programmatori C iniziano e hanno iniziato a imparare e utilizzare il C o anche i linguaggi di programmazione in generale con quel programma HelloWorld e questa printf
dichiarazione come primi nel suo genere.
Non lo sarebbero se fossero deprecati.
In un libro che sto leggendo, è scritto che printf
con un singolo argomento (senza specificatori di conversione) è deprecato.
Bene, allora concentrerei l'attenzione sul libro o sull'autore stesso. Se un autore sta davvero facendo tali, a mio parere, affermazioni errate e persino insegnando che senza spiegare esplicitamente perché lo sta facendo (se quelle affermazioni sono davvero letteralmente equivalenti fornite in quel libro), lo considererei un brutto libro. Un buon libro, al contrario di quello, spiegherà perché evitare certi tipi di metodi o funzioni di programmazione.
Secondo quanto detto sopra, l'utilizzo printf
con un solo argomento (una stringa letterale) e senza specificatori di formato non è in ogni caso deprecato o considerato "cattiva pratica" .
Dovresti chiedere all'autore cosa intendeva con questo o, meglio ancora, badare a chiarire o correggere la sezione relativa per la prossima edizione o le impronte in generale.
printf("Hello World!")
è la stessa di . aggiunge un . Invece di confrontare conputs("Hello World!")
puts()
'\n'
printf("abc")
fputs("abc", stdout)