printf Genişletme Örneği
Önceki printf İşlevinin Özelleştirilmesi Sonraki
printf Genişletme Örneği
Burada bir printf kotarıcı işlevinin nasıl tanımlandığı örneklenmiştir. Bu yazılım Kitap isimli bir veri yapısı ve Kitap * argümanları hakkında bilgi basacak %K dönüşüm belirtecini tanımlar. %K dönüşüm belirteci en küçük alan genişliği ile sola yanaştırma imini desteklemekte diğer herşeyi yoksaymaktadır.
#include <stdio.h>
#include <stdlib.h>
#include <printf.h>

typedef struct
{
  char *isim;
}
Kitap;

int
kitap_bas (FILE *akim,
              const struct printf_info *bilgi,
              const void *const *args)
{
  const Kitap *k;
  char *tampon;
  int uzunluk;

  /* Bir dizgeye çıktılanacak biçim. */
  k = *((const Kitap **) (args[0]));
  uzunluk = asprintf (&tampon, "<Kitap %p: %s>", k, k->isim);
  if (uzunluk == -1)
    return -1;

  /* En küçük alan genişliğini doldurup akıma basalım. */
  uzunluk = fprintf (akim, "%*s",
                 (info->left ? -info->width : info->width),
                 tampon);

  /* Ortalığı temizle ve dön. */
  free (tampon);
  return uzunluk;
}


int
kitap_bas_argbilgi (const struct printf_info *bilgi, size_t n,
                      int *argturleri)
{
  /* Daima tek bir argüman alıyoruz ve bu yapı için bir gösterici
     oluyor.. */
  if (n > 0)
    argturleri[0] = PA_POINTER;
  return 1;
}


int
main (void)
{
  /* Basılacak Kitabı oluşturalım. */
  Kitap kitabim;
  kitabim.isim = "Kitabım";

  /* Kitap için kotarıcı işlevi kaydedelim. */
  register_printf_function ('K', kitap_bas, kitap_bas_argbilgi);

  /* Şimdi kitabimi basalım. */
  printf ("|%K|\n", &kitabim);
  printf ("|%35K|\n", &kitabim);
  printf ("|%-35K|\n", &kitabim);

  return 0;
}
Yazılımın çıktısı şöyle olacaktır:
|<Kitap 0xffeffb7c: Kitabım>|
|        <Kitap 0xffeffb7c: Kitabım>|
|<Kitap 0xffeffb7c: Kitabım>        |
Önceki Üst Ana Başlık Sonraki
Kotarıcı İşlevin Tanımlanması Başlangıç Yerleşik Kotarıcı İşlevler
Bir Linux Kitaplığı Sayfası