避免在C+中重复if语句+;cout的MPI 我写了一个带有MPI(C接口,没有Boost等)的C++程序。在我的程序中,我有许多输出,要么输出到cout,要么输出到文件,这些输出只在秩0上完成。有什么好办法可以避免吗 编写if(rank==0)不能

避免在C+中重复if语句+;cout的MPI 我写了一个带有MPI(C接口,没有Boost等)的C++程序。在我的程序中,我有许多输出,要么输出到cout,要么输出到文件,这些输出只在秩0上完成。有什么好办法可以避免吗 编写if(rank==0)不能,c++,mpi,cout,ostream,C++,Mpi,Cout,Ostream,我通常以某种方式使用预处理器宏,例如 #define COUT if(rank == 0) std::cout 然后你就可以写了 COUT << string; COUT如果您愿意牺牲Windows系统的可移植性,在POSIX系统上静音输出的正确方法是将标准输出(以及可选的标准错误)重定向到/dev/null: int main() { ... std::ofstream sink("/dev/null"); if (rank != 0) { //

我通常以某种方式使用预处理器宏,例如

#define COUT if(rank == 0) std::cout
然后你就可以写了

COUT << string;

COUT如果您愿意牺牲Windows系统的可移植性,在POSIX系统上静音输出的正确方法是将标准输出(以及可选的标准错误)重定向到
/dev/null

int main() {
   ...
   std::ofstream sink("/dev/null");

   if (rank != 0) {
     // Mute standard output
     std::cout.rdbuf(sink.rdbuf());
     // Optionally mute standard error
     std::cerr.rdbuf(sink.rdbuf());      
   }

   no_output_from_other_ranks_from_now_on();
   ...
}
改编自

COUT << string;
int main() {
   ...
   std::ofstream sink("/dev/null");

   if (rank != 0) {
     // Mute standard output
     std::cout.rdbuf(sink.rdbuf());
     // Optionally mute standard error
     std::cerr.rdbuf(sink.rdbuf());      
   }

   no_output_from_other_ranks_from_now_on();
   ...
}