Почему вывод printf не появляется сразу при пошаговом выполнении кода?
Я использую Anjuta и GDB на Fedora 20 и создал проект C Makefile. Код выглядит так:
#include <stdio.h>
int main (void)
{
° printf ("1");
° printf ("2");
° printf ("3");
return (0);
}
° означает, что я установил точку останова в этой позиции.
Теперь, когда я отлаживаю код, нет вывода, в то время как текущая строка является одной из этих функций printf. Только когда я выхожу, основной "123" появляется в терминале.
Если я добавлю \n ко второму аргументу printf, то, когда я перейду с точки останова 2 на третью, в качестве вывода появится "12".
3 ответа
По умолчанию stdout является буферизованной строкой при записи в терминал, полностью буферизированной при записи в любой другой тип потока. Поскольку вы не печатаете никаких новых строк, вывод буферизуется. Вы можете изменить режим буферизации с помощью setbuf()
завершите каждую строку новой строкой или вызовите fflush()
когда вы хотите, чтобы печать заняла место.
Добавьте fflush(stdout) после каждого printf. Ваш вывод мал и остается в буфере до выхода из программы.
Это потому, что printf пишет в стандартный вывод, который оказывается буферизованным. Для более подробной информации смотрите здесь.