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

时间:2015-07-28 18:34:33

标签: vala

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

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在第一个示例中的sterr.printf()输出之后输出的数字,而在第二个示例中输出之前的?它不应该只是在第一个例子中打印2THIS IS AN ERROR!吗?

1 个答案:

答案 0 :(得分:3)

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

如果需要,可以致电stdout.flush()