CodeBlanks Logo Icon CodeBlanks

printf gibi fonksiyon

  • C kursu
  • Orta seviye
  • Ders 78/116
  • 5 dk

printf benzeri kendi fonksiyonunu yazmayı öğrenirsin.

vprintf ile printf gibi fonksiyon

printf gibi davranan kendi fonksiyonunu yazmak istersen vprintf kullanırsın. Bu fonksiyon, bir va_list alır ve format dizesine göre yazdırır.

İmza: void log_msg(const char *level, const char *fmt, ...). İçeride önce seviyeyi yazdırırız (printf("%s: ", level)), sonra va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); ile formatlı kısmı yazdırırız. vprintf, printf'in va_list alan varyantıdır; aynı format belirteçlerini (%d, %s vb.) kullanır. Bu desen, günlük (logger) fonksiyonlarının temelidir. vfprintf ve vsprintf benzer şekilde dosyaya ve dizeye yazarlar.

log_msg örneği

Gerçek bir log_msg fonksiyonu, seviye ve formatlı mesajı birleştirir. Çıktı örneğin BILGI: Toplam 42 olur.

Tanım: void log_msg(const char *level, const char *fmt, ...) { printf("%s: ", level); va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); printf("\n"); }. Önce seviye ve iki nokta yazdırılır, sonra vprintf ile formatlı kısım, en son yeni satır. va_start'ın ikinci parametresi burada fmt'tir çünkü o son sabit parametredir. Çağrı: log_msg("BILGI", "Toplam %d", 42). Bu desen, farklı seviyelerde günlük tutan kitaplıkların temelidir; seviyeyi değiştirip aynı formatı kullanabilirsin.

Uygulama log_msg fonksiyonu

void log_msg(const char *level, const char *fmt, ...) yaz. printf("%s: ", level); ile başla. va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); çağır. Son olarak printf("\n");. main'de log_msg("BILGI", "Toplam %d", 42); çağır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdarg.h>

// log_msg: level ve format ile mesaj yazdır
// printf ile seviyeyi yazdır; va_list, va_start, vprintf, va_end, newline
// main: log_msg("BILGI", "Toplam %d", 42) çağır

int main(void) {
    // buraya yaz
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <stdarg.h>

void log_msg(const char *level, const char *fmt, ...) {
    printf("%s: ", level);
    va_list args;
    va_start(args, fmt);
    vprintf(fmt, args);
    va_end(args);
    printf("\n");
}

int main(void) {
    log_msg("BILGI", "Toplam %d", 42);
    return 0;
}

Beklenen çıktı

BILGI: Toplam 42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 vprintf ailesi

Kavram Anlamı
vprintf ekrana yazdır
vfprintf dosyaya yazdır
vsprintf dizeye yazdır
vsnprintf sınırlı dizeye yaz

2 vprintf çağrısı

Soru
vprintf(fmt, ____);
Cevap
vprintf(fmt, args);

Açıklama: vprintf(fmt, args) formatlı çıktıyı verir.

3 vprintf ile printf arasındaki fark nedir?

  • vprintf daha yavaştır
  • printf va_list alır
  • vprintf va_list alır Doğru cevap
  • vprintf format almaz

Açıklama: vprintf, printf'in va_list alan varyantıdır.

Orta seviye bölümündeki tüm dersler