Di C, Mencetak ke stdout itu mudah, dengan printf
dari stdio.h
.
Namun, bagaimana cara mencetak ke stderr? Kita dapat menggunakannya fprintf
untuk mencapainya, tetapi sintaksnya tampak aneh. Mungkin bisa kita gunakan printf
untuk mencetak ke stderr?
fprintf
.Jawaban:
Sintaksnya hampir sama dengan
printf
. Denganprintf
Anda berikan format string dan isinya yaitu:Dengan
fprintf
itu adalah sama, kecuali sekarang Anda juga menentukan tempat untuk mencetak ke:Atau dalam kasus Anda:
sumber
Contoh:
sumber
stderr biasanya unbuffered dan stdout biasanya. Hal ini dapat menyebabkan keluaran yang tampak aneh seperti ini, yang menunjukkan bahwa kode dijalankan dalam urutan yang salah. Tidak, hanya saja buffer stdout belum di-flush. Aliran yang dialihkan atau disalurkan tentu saja tidak akan melihat interleave ini karena mereka biasanya hanya melihat output dari stdout saja atau stderr saja.
Meskipun pada awalnya stdout dan stderr datang ke konsol, keduanya terpisah dan dapat dialihkan satu per satu.
sumber
Tahukah kamu
sprintf
? Itu pada dasarnya sama denganfprintf
. Argumen pertama adalah tujuan (file dalam kasusfprintf
iestderr
), argumen kedua adalah format string, dan sisanya adalah argumen seperti biasa.Saya juga merekomendasikan referensi ini
printf
(dan keluarga) .sumber
Jika Anda tidak ingin mengubah kode saat ini dan hanya untuk penggunaan debug.
Tambahkan makro ini:
Ganti
stderr
kestdout
jika Anda ingin memutar kembali.Ini membantu untuk debug, tetapi ini bukan praktik yang baik.
sumber
Untuk mencetak konteks Anda, Anda dapat menulis kode seperti ini:
sumber