C
printf gibi fonksiyon
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
vprintf ailesi
- vprintf
- ekrana yazdır
- vfprintf
- dosyaya yazdır
- vsprintf
- dizeye yazdır
- vsnprintf
- sınırlı dizeye yaz
-
vprintf çağrısı
vprintf(fmt, ____);
Cevabı göster
vprintf(fmt, args);
-
vprintf ile printf arasındaki fark nedir?
- vprintf daha yavaştır
- printf va_list alır
- vprintf va_list alır
- vprintf format almaz
Cevabı göster
vprintf va_list alır — vprintf, printf'in va_list alan varyantıdır.
Sıradaki ders: vsnprintf