避免在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();
...
}