Почему вывод 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 пишет в стандартный вывод, который оказывается буферизованным. Для более подробной информации смотрите здесь.

Другие вопросы по тегам