суббота, 20 февраля 2010 г.

Переопределим printf

Иногда бывает так, что printf ничего не выводит. Видимо, это из-за того, что она пишет в буфер, который по каким-то причинам не вываливает содержимое в stdout. Чтобы принудительно очистить это буфер используется fflush(stdout).

Логично переопределить printf как printf + fflush. Сложность в том, что у printf переменное число аргументов. если написать
#define printf(A) printf(A); fflush(stdout);
а потом задать строку форматирования с несколькими аргументами, компилятор ругнется, что-де слишком много параметров у макроса printf(A).

Решается это так (нашел в интернете)
#define printf(A) printf A; fflush(stdout);
printf(("t%d: RRJ in %d\n",TRED, t1));

Тут важно, что вызывать printf надо с ДВОЙНЫМИ скобками.

Комментариев нет: