为什么 Vala 在 stdout.printf 之前打印 stderr.printf,即使后者在代码中排在第一位?

Why does Vala print stderr.printf before stdout.printf even though the later is first in the code?

这是一种奇怪的行为。基本上,我有这个代码:

stdout.printf("Enter some random number: ");
int number = int.parse(stdin.read_line());
stdout.printf(number.to_string());
stderr.printf("THIS IS AN ERROR!\n");

现在让我感到奇怪的是,当我编译 运行 这段代码时,我得到了这个输出:

Enter some random number: 2
THIS IS AN ERROR!
2user@host:...

但是,如果我在最后两个命令之间添加一行 stdout.printf("\n");,我会得到如下输入:

Enter some random number: 2
2
THIS IS AN ERROR!
user@host

为什么会这样?为什么 Vala 在第一个示例中输出 aftersterr.printf() 输出,而在第二个示例中输出 before?它不应该在第一个例子中打印 2THIS IS AN ERROR! 吗?

Vala 只是在下面使用 C 的 fprintf,它显示了这些语义。看看 Why does printf not flush after the call unless a newline is in the format string?

如果你愿意,你可以打电话给stdout.flush()