W C drukowanie na standardowe wyjście jest łatwe dzięki printf
from stdio.h
.
Jednak w jaki sposób można drukować na stderr? fprintf
Pozornie możemy to osiągnąć, ale jego składnia wydaje się dziwna. Może możemy użyć printf
do drukowania na stderr?
fprintf
.Odpowiedzi:
Składnia jest prawie taka sama jak
printf
. Wraz z podaniemprintf
podajesz format napisu i jego zawartość tj:Z
fprintf
nim jest tak samo, z wyjątkiem tego, że teraz określasz również miejsce drukowania:Lub w twoim przypadku:
źródło
Przykłady:
źródło
stderr jest zwykle niebuforowany, a stdout zwykle jest. Może to prowadzić do dziwnie wyglądających wyników, co sugeruje, że kod jest wykonywany w złej kolejności. Tak nie jest, po prostu bufor stdout nie został jeszcze opróżniony. Strumienie przekierowane lub potokowe oczywiście nie widzą tego przeplotu, ponieważ normalnie widzą tylko wyjście stdout lub tylko stderr.
Chociaż początkowo do konsoli trafiają zarówno stdout, jak i stderr, oba są oddzielne i mogą być indywidualnie przekierowywane.
źródło
Czy wiesz
sprintf
? W zasadzie to samo dotyczyfprintf
. Pierwszym argumentem jest miejsce docelowe (w przypadkufprintf
np. Plikstderr
), drugim argumentem jest łańcuch formatu, a reszta to zwykłe argumenty.Polecam również to
printf
(i rodzinne) odniesienie .źródło
Jeśli nie chcesz modyfikować obecnych kodów i tylko do debugowania.
Dodaj to makro:
Zmień
stderr
na,stdout
jeśli chcesz cofnąć.Jest to pomocne przy debugowaniu, ale nie jest dobrą praktyką.
źródło
Aby wydrukować swój kontekst, możesz napisać taki kod:
źródło