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

Dra*_*mal 3 c gcc cygwin

我的代码的简化版本是:

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

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

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

是否有可能externalstuff.h延迟输出?如果是这样,怎么样?

我在Widnows 7上使用gcc in cygwin.

das*_*ght 7

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

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

如果你不喜欢这种行为,并且不介意性能稍慢,你可以调用

setbuf(stdout, NULL);
Run Code Online (Sandbox Code Playgroud)

禁用缓冲.