我知道有很多关于这个问题的主题,但是没有一个能够帮助我。
我在我的C / C ++项目中使用std::cout
和std::cerr
打印信息(cout)或错误(cerr)。 但是在执行时,他们不按照正确的顺序打印,他们似乎是“分组打印”。 有时候所有的人都会和所有的人相处,
我尝试在每行之后flush()
,不工作。 (幸运的是,每次使用它都是可怕的)。 还试过setvbuf(stdout, NULL, _IONBF, 0);
同样的问题…
如果直接在linux的控制台上运行程序,顺序是好的,但由于颜色,eclipse控制台更有用。
这里的代码示例
#include <iostream> int main(int argc, char** argv) { std::cerr << __LINE__ << std::endl; std::cerr << __LINE__ << std::endl; std::cout << __LINE__ << std::endl; std::cerr << __LINE__ << std::endl; std::cerr << __LINE__ << std::endl; std::cout << __LINE__ << std::endl; }
和控制台打印
11 12 14 15 13 16
==>错误的订单…在这个例子中,cerr在cout之前出现
好的情况如下, std::cout
被添加到buffor中,而std::cerr
不会。 std::cerr
速度更快,不需要刷新。 另外std::cerr
和std::cout
使用不同的流。
这里的问题是std::cerr
马上显示std:cout
在显示之前需要刷新。