我知道那里有很多关于此的主题,但他们都没有帮助我。Eclipse C++控制台打印命令linux
我用我的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
这很可能是eclipse的一个问题。 'std :: endl'实际上会导致一个'flush()'FYI – Avery3R
为什么你期望,打印到两个不同流的文本有一个定义的序列,它将出现?没有保证,它在控制台上工作可能是一个实现细节。为什么不把它打印到同一个流中,并在前缀“Info:”和“Error:”之类的东西上,那么它就能保证工作。 –
我也会尝试为每个调用使用锁(互斥锁)并查看它的行为。 – Mercury