GNU libc ayrıca printf kotarıcı oluşumunun somut ve kullanışlı bir uygulamasını içerir. Gerçek sayıları özel bir yolla basmak üzere iki işlev vardır.
int printf_size | (FILE *akım,
const struct printf_info *bilgi,
const void *const *args) |
işlev
Verilen bir gerçek sayıyı %f dönüşüm belirtecini kullanarak özel bir şekilde basar. Sayıyı 1000’den daha küçük bir sayı olarak ifade eden bir birim karakteri kullanılır. Bu birim karakteri bir bölene karşılıktır. Mümkün iki bölen vardır; biri 1000'in kuvvetleri diğeri 1024'ün kuvvetleri. Birim, küçük harf ise 1024'ün kuvvetleri, büyük harf ise 1000'in kuvvetleri kullanılır.
Birim bayt, kilobayt, megabayt, gigabayt, vs. karşılığı bir karakterdir. Tamamı tablo olarak:
Öntanımlı hassasiyet 3’tür, örneğin 1024 sayısı için dönüşüm belirtimi küçük birim harfi ile %.3fk olarak yazılır ve bunun çıktısı 1.000k olur.
register_printf_function işlevinin gereksinimlerinden dolayı argümanlar hakkında bilgi döndüren bir işlev daha üretmeliyiz.
int printf_size_info | (const struct printf_info *akım,
size_t n,
int *argtürleri) |
işlev
Bu işlev şablon dizgesindeki belirteçlere karşılık olacak argümanların türleri hakkında bilgiyi argtürleri içinde döndürür. Bu işlev için tek argüman vardır.
Bu iki işlevi kullanırken aşağıdakine benzer bir çağrı ile kaydedilmelidir:
register_printf_function ('B', printf_size, printf_size_info);
Burada 'B' belirteç karakteri bütük harf olduğundan sayıları 1000'in kuvveti olarak basacak bir işlevi kaydetmiş olduk. Buna ek olarak 'b' harfini de kullanmak için bir çağrı daha yapılmalıdır:
register_printf_function ('b', printf_size, printf_size_info);
Böylece 1024'ün kuvvetini de basabileceğiz. Burada dikkat ettiyseniz iki işlevde dönüşüm belirteçleri farklıdır. printf_size işlevi sadece büyük ve küçük harfler arasındaki farkı bilir.
'B' ve 'b' kullanımı hiç de tesadüf değildir. Hatta bunları biçim belirteci olarak kullanan bazı sistemler de olduğundan bu harfleri kullanmanız önerilir.