В C печать в стандартный вывод выполняется легко с помощью printf
from stdio.h
.
Однако как можно печатать в stderr? fprintf
Очевидно, мы можем использовать для этого, но его синтаксис кажется странным. Может быть, мы можем использовать printf
для печати в stderr?
fprintf
.Ответы:
Синтаксис почти такой же, как у
printf
. С помощьюprintf
вы указываете формат строки и ее содержимое, т.е.С
fprintf
ним то же самое, за исключением того, что теперь вы также указываете место для печати:Или в вашем случае:
источник
Примеры:
источник
stderr обычно не буферизуется, а stdout обычно. Это может привести к тому, что результат будет выглядеть странно, что говорит о том, что код выполняется в неправильном порядке. Это не так, просто буфер stdout еще не очищен. Перенаправленные или передаваемые по конвейеру потоки, конечно, не увидят это чередование, поскольку обычно они видят только вывод только stdout или только stderr.
Хотя изначально на консоль выводятся как stdout, так и stderr, оба являются отдельными и могут быть перенаправлены индивидуально.
источник
Ты знаешь
sprintf
? В основном то же самое и сfprintf
. Первый аргумент - это место назначения (файл в случаеfprintf
iestderr
), второй аргумент - это строка формата, а остальные - обычные аргументы.Я также рекомендую эту
printf
(и семейную) ссылку .источник
Если вы не хотите изменять текущие коды и просто для отладки.
Добавьте этот макрос:
Изменить
stderr
наstdout
если хотите откатиться.Это полезно для отладки, но это не очень хорошая практика.
источник
eprintf
или что-то в этом роде. (: O На самом деле это пример макроса с переменным числом аргументов из GCC (3.2): gcc.gnu.org/onlinedocs/gcc-3.2/cpp/Variadic-Macros.html )Чтобы распечатать свой контекст, вы можете написать такой код:
источник