为什么无限循环会在我的 C 程序中更早地阻塞 printf 语句?

Why does an infinite loop block a printf statement earlier in my C program?

此 C 程序打印 Done,然后进入无限循环。

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("Done");
    while (1) {}
    return 0;
}

但是当我 运行 它时,这段代码 而不是 打印 Done。这是为什么?

printf 语句后添加 fflush(stdout);stdout 默认情况下通常是行缓冲的。

需要刷新缓冲区。通常控制台输出在收到 '\n'.

之前不会刷新

这里有一个很少用到的函数,fflush()

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("Done");
    fflush(stdout);
    while (1) {}
    return 0;
}

应该为您打印。

stdout 已缓冲。它不会打印直到它被刷新(例如,但是打一个换行符)。

您可以将 '\n' 添加到您的 printf 调用中:

printf("Done\n");

或通过调用

禁用其抛光
setbuf(stdout, NULL);