为什么C语言只有在换行符出现时才会输出到Shell?

4

在C语言中,有时候我的输出不会被打印到终端上,直到我打印换行符\n。例如:

int main()
{
   printf("Hello, World");
   printf("\n");
   return 0;
}

在下一个printf之前,Hello World不会被打印出来(我知道这是通过在gdb中设置断点)。有人能解释一下为什么会发生这种情况以及如何避免吗?

谢谢!


从TI维基,但与理解此内容相关:http://processors.wiki.ti.com/index.php/Tips_for_using_printf#Buffering_modes - us2012
1
行缓冲(setvbuf(3)或stdbuf(1)) - sehe
2个回答

8

这样做是出于性能考虑:将数据传递到控制台逐个字符地进行操作太过昂贵(从执行速度的角度来看),因此输出会被缓冲直到打印换行符为止:字符会被收集在一个数组中,直到打印时才会一次性地传递整个字符串到控制台。您也可以通过如下方式强制输出:

fflush(stdout);

4
除了使用 fflush() 外,您还可以通过setvbuf(3)设置缓冲选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接