Di samping jawaban lain yang dijelaskan dengan baik dengan kekhawatiran sampingan apa pun, saya ingin memberikan jawaban yang tepat dan ringkas untuk pertanyaan yang diberikan.
Mengapa printf
dengan satu argumen (tanpa penentu konversi) tidak digunakan lagi?
Sebuah printf
panggilan fungsi dengan argumen tunggal pada umumnya tidak usang dan memiliki juga tidak ada kerentanan ketika digunakan dengan benar karena Anda selalu harus kode.
C Pengguna di seluruh dunia, dari status pemula hingga ahli status menggunakan printf
cara itu untuk memberikan frase teks sederhana sebagai output ke konsol.
Selanjutnya, Seseorang harus membedakan apakah argumen satu-satunya ini adalah string literal atau penunjuk ke string, yang valid tetapi umumnya tidak digunakan. Untuk yang terakhir, tentu saja, dapat terjadi keluaran yang tidak nyaman atau segala jenis Perilaku Tidak Terdefinisi , ketika penunjuk tidak diatur dengan benar untuk menunjuk ke string yang valid tetapi hal ini juga dapat terjadi jika penentu format tidak cocok dengan argumen masing-masing dengan memberikan banyak argumen.
Tentu saja, ini juga tidak benar dan tepat bahwa string, yang disediakan sebagai satu-satunya argumen, memiliki format atau penentu konversi, karena tidak ada konversi yang akan terjadi.
Yang mengatakan, memberikan string literal sederhana seperti "Hello World!"
hanya argumen tanpa penentu format apa pun di dalam string itu seperti yang Anda berikan dalam pertanyaan:
printf("Hello World!");
adalah tidak usang atau " praktek buruk " sama sekali tidak memiliki kerentanan apapun.
Nyatanya, banyak programmer C mulai dan mulai belajar dan menggunakan C atau bahkan bahasa pemrograman secara umum dengan program HelloWorld dan printf
pernyataan ini sebagai yang pertama dari jenisnya.
Mereka tidak akan menjadi seperti itu jika mereka dicela.
Dalam buku yang saya baca, tertulis bahwa printf
dengan satu argumen (tanpa penentu konversi) tidak berlaku lagi.
Nah, kemudian saya akan mengambil fokus pada buku atau penulis itu sendiri. Jika seorang penulis benar-benar melakukan seperti itu, menurut pendapat saya, pernyataan yang salah dan bahkan mengajarkan bahwa tanpa secara eksplisit menjelaskan mengapa dia melakukannya (jika pernyataan itu benar-benar setara dengan yang diberikan dalam buku itu), saya akan menganggapnya sebagai buku yang buruk . Sebuah buku yang bagus , sebagai lawan dari itu, akan menjelaskan mengapa menghindari jenis metode atau fungsi pemrograman tertentu.
Menurut apa yang saya katakan di atas, menggunakan printf
hanya dengan satu argumen (string literal) dan tanpa penentu format apa pun tidak akan usang atau dianggap sebagai "praktik buruk" .
Anda harus bertanya kepada penulis, apa yang dia maksud dengan itu atau bahkan lebih baik, ingatkan dia untuk mengklarifikasi atau mengoreksi bagian relatif untuk edisi berikutnya atau cetakan pada umumnya.
printf("Hello World!")
ini tidak sama denganputs("Hello World!")
.puts()
menambahkan a'\n'
. Sebaliknya dibandingkanprintf("abc")
denganfputs("abc", stdout)