Bir Şablon Dizgesinin Çözümlenmesi Örneği
Önceki Biçimli Çıktı Sonraki
Bir Şablon Dizgesinin Çözümlenmesi Örneği
Bu örnekte bir biçim dizgesi için gereken argüman türleri çözümlenmektedir. Bu örneğe özel olarak argüman türlerini NUMBER, CHAR, STRING ve STRUCTURE isimleri ile sınıflandırdık (başka türlerde var tabii ama bu sadece bir örnek).
/* Belirtilen narg adet nesne şablon dizgesi için
   geçerli mi, değil mi?
   Geçerliyse 1,
   değilse 0 dönsün ve bir hata iletisi bassın.  */

int
validate_args (char *sablon, int nargs, OBJECT *args)
{
  int *argturleri;
  int ngereken;

  /* Argümanlar hakkında bilgi alalım.
     Her dönüşüm belirtimi en az iki karakterlik olmalı,
     o halde dizgenin yarı uzunluğundan daha fazla sayıda
     belirtim olamaz.  */

  argturleri = (int *) alloca (strlen (sablon) / 2 * sizeof (int));
  ngereken = parse_printf_format (sablon, nargs, argturleri);

  /* Argüman sayısına bakalım.  */
  if (ngereken > nargs)
  {
    error ("argüman sayısı çok az (en az %d argüman gerekiyor)", ngereken);
    return 0;
  }

  /* Her argüman için istenen C türüne bakalım
     ve verilen nesne uygun mu görelim.  */
  for (i = 0; i < ngereken; i++)
  {
    int istenen;

    if (argturleri[i] & PA_FLAG_PTR)
      istenen = STRUCTURE;
    else
      switch (argturleri[i] & ~PA_FLAG_MASK)
      {
        case PA_INT:
        case PA_FLOAT:
        case PA_DOUBLE:
          istenen = NUMBER;
          break;
        case PA_CHAR:
          istenen = CHAR;
          break;
        case PA_STRING:
          istenen = STRING;
          break;
        case PA_POINTER:
          istenen = STRUCTURE;
          break;
      }
    if (TYPE (args[i]) != istenen)
    {
      error ("%d. argümanın türü uygun değil", i);
      return 0;
    }
  }
  return 1;
}
Önceki Üst Ana Başlık Sonraki
Bir Şablon Dizgesinin Çözümlenmesi Başlangıç printf İşlevinin Özelleştirilmesi
Bir Linux Kitaplığı Sayfası