Согласно Posix, в C stdout может буферизоваться по строке и зависеть от описанной вами задержки в худшем случае. Это не обязательно.
Многие языки программирования имеют функцию, называемую 'printf'; о чем вы говорите? Похоже на C из вашего примера.
Я только что посмотрел исходный код printf для библиотеки времени выполнения C для некоторой версии Visual Studio 2011-i sh (последняя, которая у меня оказалась под рукой), и основанная на очень беглом просмотре код (он довольно сложен со всеми его условностями препроцессора), я бы сказал, что он буферизуется во время выполнения, а затем очищает буфер в конце вызова как для stdout, так и для stderr.
Если вы хотите написать переносимый код, вы не должны предполагать вышеуказанное. Чтобы данные, записанные в стандартный вывод (без символа конца строки), стали видимыми, вы должны явно flu sh.