Kapsanan herhangi bir yan endişeye sahip iyi açıklanmış diğer cevapların yanı sıra, verilen soruya kesin ve öz bir cevap vermek istiyorum.
Neden printf
tek bir bağımsız değişkenle (dönüşüm belirteçleri olmadan) kullanımdan kaldırılıyor?
Bir printf
genel bir tek argüman alan işlev çağrısı olduğu değil kaldırılan ve aynı zamanda hiçbir açığı içeren zaman her zaman kod edecektir olarak doğru kullanıldığında.
Durum başlangıcından durum uzmanı kullanımına kadar tüm dünyadaki C Kullanıcılar printf
, konsola çıktı olarak basit bir metin cümlesi vermek bu yolu kullanır.
Ayrıca, birisinin bu tek ve tek bağımsız değişkenin bir dizge değişmezi mi yoksa geçerli olan ancak yaygın olarak kullanılmayan bir dizgeye işaretçi mi olduğunu ayırt etmesi gerekir. İkincisi için, elbette, uygunsuz çıktılar veya her türlü Tanımlanmamış Davranış ortaya çıkabilir. işaretçi geçerli bir dizgeyi gösterecek şekilde doğru bir şekilde ayarlanmadığında ortaya çıkabilir, ancak bu şeyler, biçim belirleyicileri ilgili bağımsız değişkenlerle eşleşmiyorsa da oluşabilir. çoklu argümanlar.
Elbette, tek ve tek argüman olarak sağlanan dizgenin herhangi bir format veya dönüşüm tanımlayıcısına sahip olması da doğru ve uygun değildir, çünkü dönüşüm olmayacaktır.
Bununla "Hello World!"
birlikte, soruda sağladığınız gibi, bu dizede herhangi bir biçim belirticisi olmadan yalnızca bağımsız değişken gibi basit bir dize değişmezi vermek :
printf("Hello World!");
olduğu değil kaldırılan ya da " kötü uygulama " Hiç ne de herhangi bir güvenlik açıklarını sahiptir.
Aslında, birçok C programcısı bu HelloWorld programı ve bu printf
ifade türünün ilk örneği olarak C'yi ve hatta genel olarak programlama dillerini öğrenmeye ve kullanmaya başladı .
Kullanımdan kaldırılsalar öyle olmazlardı.
Okuduğum bir kitapta, printf
tek bir argümanın (dönüşüm belirteçleri olmadan) kullanımdan kaldırıldığı yazılıyor .
O zaman kitaba ya da yazara odaklanırım. Bir yazar gerçekten böyle yapıyorsa, bence, yanlış iddialar yapıyorsa ve hatta bunu neden yaptığını açık bir şekilde açıklamadan öğretiyorsa (eğer bu iddialar gerçekten o kitapta verilenler gerçekten eşdeğerse), onu kötü bir kitap olarak değerlendiririm. Bunun aksine iyi bir kitap, belirli türden programlama yöntemlerinden veya işlevlerinden neden kaçınılması gerektiğini açıklayacaktır .
Yukarıda söylediğime göre, printf
yalnızca bir bağımsız değişkenle (bir dizge değişmezi) ve herhangi bir biçim belirticisi olmadan kullanmak, hiçbir durumda kullanımdan kaldırılmaz veya "kötü uygulama" olarak değerlendirilmez .
Yazara, bununla ne demek istediğini sormalısınız, hatta daha iyisi, bir sonraki baskı veya genel olarak diziler için ilgili bölümü açıklığa kavuşturmasını veya düzeltmesini sağlamalısınız.
printf("Hello World!")
ile aynı değildirputs("Hello World!")
.puts()
ekler a'\n'
. Bunun yerine karşılaştırmakprintf("abc")
içinfputs("abc", stdout)