Sé que hay muchos temas sobre esto, pero ninguno de ellos me ayuda.
Yo uso en mi proyecto C/C++ std::cout y std::cerr para imprimir información (cout) o error (cerr). Pero al ejecutarlo no imprimen en el orden correcto, parece que "imprimen en grupo". En algún momento todo cerr luego todo cout y en algún momento all cout primero luego todo cerr.
Traté de flush() después de cada línea, no funcionó. (por suerte, sería horrible tener que usarlo cada tanto...). También probé setvbuf(stdout, NULL, _IONBF, 0); mismo problema...
Si ejecuta el programa directamente en la consola de Linux, el orden es bueno, pero la consola eclipse es más útil debido a los colores.
Aquí ejemplo de código
#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; }Y consola de impresión
11 12 14 15 13 16==> Orden incorrecto... En este ejemplo sale cerr antes que cout
Bien, la situación es la siguiente, std::cout se agrega a un búfer y std::cerr no. std::cerr es más rápido y no necesita ser vaciado. También std::cerr y std::cout usan flujos diferentes.
El problema aquí es que std::cerr se muestra de inmediato y std:cout debe vaciarse antes de que se muestre.