我知道那裏有很多關於此的主題,但他們都沒有幫助我。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