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

What could be delaying the printf output of my C program?

我的代码的简化版本是:

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

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

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

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

我在 Widnows 7 的 cygwin 中使用 gcc。

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

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

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

setbuf(stdout, NULL);

禁用缓冲。