Bu bölümde bir printf şablon dizgesindeki dönüşüm belirtimlerinin tam sözdizimi ayrıntılarıyla açıklanmıştır.
Şablon dizgesindeki bir dönüşüm belirtiminin parçası olmayan karakterler oldukları gibi akıma çıktılanır. Şablon dizgesinde çok baytlı karakter dizileri de kullanılabilir (Bkz.
Karakter Kümeleriyle Çalışma).
Bir printf şablon dizgesindeki dönüşüm belirtimlerinin genel sözdizimi:
% [ konum-num $] imler genişlik [ . hassasiyet ] tür dönüşüm
veya
% [ konum-num $] imler genişlik . * [ param-no $] türdönüşüm
Örneğin, %-10.8ld dönüşüm belirtecinde, - imi, 10 alan genişliğini, 8 hassasiyeti, l veri türünü, d ise dönüşüm tarzını belirtir. (Bu dönüşüm belirteci artbileşen argümanının en az 10 karakter genişlikteki bir alana onluk tabanda 8 basamaklı bir long int türündeki değerinin sola yanaşık olarak basılacağını belirtir.)
Çıktı dönüşüm belirtimlerinde % işaretini izleyen belirteçler sırayla aşağıda açıklanmıştır:
İsteğe bağlı bir konumlama parametresi. Normalde printf şablon dizgesini izleyen argümanları verildikleri sıraya göre basar. Ancak bazı durumlarda (örneğin çevirilerde) bu sıra uygun düşmez ve bunların sırasını değiştirmek gerekir. Bu sıra değişikliğini belirtmek için ayrı bir parametre kullanılır.
Sözdizimindeki konum-num parçası 1’den çağrıdaki artbileşen argümanlarının sayısına kadar bir aralıkta bir tamsayı olmalıdır. Bazı gerçeklemeler belirtilebilecek artbileşen argümanlarının sayısına bir üst sınır koyar. Bu sınır değer aşağıdaki sabit ile belirlenir.
NL_ARGMAX sabitinin değeri bir
printf çağrısında belirtilebilecek artbileşen argümanların sayısının üst sınırıdır. Çalışma anında etkin olan bu değer
sysconf'u
_SC_NL_ARGMAX parametresi ile kullanarak alınabilir. Bkz.
Sysconf Tanımı.
Bazı sistemler oldukça düşük değerlere sahiptir, örneğin System V için bu değer 9'dur. GNU C kütüphanesinde böyle bir sınır yoktur.
Şablon dizgesindeki dönüşüm belirtimlerinden birinde bu parametre gerekliyse hepsinde olmalıdır. Aksi takdirde, işlevin davranışı tanımlanmamıştır.
Dönüşüm belirtiminin normal davranışını değiştiren sıfır veya daha fazla
im karakteri.
En küçük alan genişliğini belirten isteğe bağlı bir onluk tamsayı. Normal dönüşüm bundan daha az karakter üretiyorsa eksik karakterlerin yeri boşluklarla doldurulur. Bu bir
en küçük değerdir; normal dönüşüm bundan daha fazla karakter üretiyorsa, değer alan genişliği ile sınırlanmaz. Normalde çıktı alan içinde sağa yanaştırılır.
Alan genişliğini * ile de belirtebilirsiniz. Bu durumda argünman listesindeki sonraki argüman alan genişliği olarak kullanılır. Değer int türünden olmalıdır. Değer negatifse - işareti im karakteri olarak, mutlak değer ise alan genişliği olarak kullanılır.
Sayısal dönüşümlerde basamak sayısını belirtmek için isteğe bağlı bir
hassasiyet değeri. Hassasiyet belirtilmişse, bir noktadan (
.) sonra gelen bir onluk tamsayıdır (verilmezse öntanımlı değeri sıfırdır).
Hassasiyeti * ile de belirtebilirsiniz. Bu durumda argünman listesindeki sonraki argüman hassasiyet olarak kullanılır. Değer int türünden olmalıdır. Negatifse yoksayılır. Hem alan genişliğini hem de hassasiyeti * ile belirtirseniz, alan genişliği argümanı hassaiyet argümanından önce olmalıdır. Diğer C kütüphanesi sürümleri bu sözdizimini tanıyamayabilir.
İsteğe bağlı bir
tür değiştirme karakteri; artbileşen argümanın türünden farklı bir tür belirtmek için kullanılır. (Örneğin tamsayı dönüşümleri
int türünde varsayılır, ama
h,
l veya
L harfi ile başka bir tür belirtebilirsiniz.)
Uygulanacak dönüşümü belirten bir karakter (
dönüşüm belirteci).
İzin verilen seçenekler ve onların yorumlanışı farklı dönüşüm belirteçleri için aynı değildir. Bir seçeneğin kullanıldığı bir dönüşümdeki yorumlanışı ile ilgili bilgileri, o dönüşümün açıklamalarında bulabilirsiniz.
-Wformat seçeneği ile GNU C derleyicisi printf ve ilgili işlevleri denetler. Biçim dizgesine bakarak doğru sayı ve türde argüman belirtilip belirtilmediğini denetler. Yazdığınız bir printf tarzı biçim dizgesini denetlemek için GNU C sözdizimini derleyiciye söyleyecek bir işlev de vardır. (GCC info'sundaki "İşlev Özniteliklerinin Bildirilmesi" [Declaring Attributes of Functions] bölümüne bakınız.)