什么可能会延迟我的 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);
禁用缓冲。
我的代码的简化版本是:
#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);
禁用缓冲。