什么可能延迟我的C程序的printf输出?

时间:2015-02-04 17:07:28

标签: c gcc cygwin

我的代码的简化版本是:

#include "externalstuff.h"
void main(){
    printf("Hello?");
    /* make calls to externalstuff
    ....
    */
}

我没有写externalstuff.h,所以我不确定那里到底发生了什么。

externalstuff的调用需要一些时间才能执行。我希望"Hello?"会被打印出来,然后我必须等待那些外部调用完成,然后我的程序就会结束。但似乎正在发生的事情是"Hello?"仅在我的计划结束之后才会被打印出来,经过漫长的等待externalstuff之后。

externalstuff.h中的某些内容是否可能会延迟此输出?如果是这样,怎么样?

我在Widnows 7上使用gcc in cygwin。

1 个答案:

答案 0 :(得分:5)

缓冲会延迟程序的输出。当您调用printf时,输出将存储在缓冲区中,直到发生以下三种情况之一:

  • 内部缓冲区的长度不足以保持输出,或
  • 您可以调用fflush(stdout)以明确地将缓冲区发送到控制台,或
  • 您打印'\n'字符,输出发送到控制台(而不是将输出发送到文件)。

如果您不喜欢这种行为,并且不介意性能稍慢,可以致电

setbuf(stdout, NULL);

禁用缓冲。