我經常使用cout
在我的代碼中的許多不同位置進行調試,然後我感到沮喪並且手動對它們進行評論。如何在運行時禁用cout輸出?
有沒有辦法在運行時抑制cout輸出?
更重要的是,假設我想要抑制所有cout
輸出,但我仍然希望在終端中看到1個特定輸出(假設程序的最終輸出)。
是否可以使用打印到終端的「」其他方式「來顯示程序輸出,然後當抑制cout仍然可以看到用」「其他方式」「打印的東西時?
我經常使用cout
在我的代碼中的許多不同位置進行調試,然後我感到沮喪並且手動對它們進行評論。如何在運行時禁用cout輸出?
有沒有辦法在運行時抑制cout輸出?
更重要的是,假設我想要抑制所有cout
輸出,但我仍然希望在終端中看到1個特定輸出(假設程序的最終輸出)。
是否可以使用打印到終端的「」其他方式「來顯示程序輸出,然後當抑制cout仍然可以看到用」「其他方式」「打印的東西時?
不要使用cout
用於調試目的,但定義一個不同的對象(或功能,或宏),通過調用向它,那麼你可以在一個地方禁用該功能或宏。
您可以用戶cerr
- 用於調試目的的錯誤的標準輸出流。
此外,還有clog
- 用於記錄的標準輸出流。
通常,它們都表現得像cout
。
實施例:
cerr << 74 << endl;
當然,你可以(example here):
int main() {
std::cout << "First message" << std::endl;
std::cout.setstate(std::ios_base::failbit);
std::cout << "Second message" << std::endl;
std::cout.clear();
std::cout << "Last message" << std::endl;
return 0;
}
輸出:
First message
Last message
這是因爲把數據流中fail
狀態會使它靜靜地丟棄任何輸出,直到failbit被清除。
看來你打印調試消息。您可以在Visual C++/MFC中使用TRACE,或者您可能只想創建一個處理它的Debug()
函數。只有在設置了不同的標誌時,才能實現它。很多程序使用名爲verbose
或-v
的命令行參數來控制其日誌和調試消息的行爲。
要禁止輸出,您可以從cout斷開底層緩衝區。
#include <iostream>
using namespace std;
int main(){
// get underlying buffer
streambuf* orig_buf = cout.rdbuf();
// set null
cout.rdbuf(NULL);
cout << "this will not be displayed." << endl;
// restore buffer
cout.rdbuf(orig_buf);
cout << "this will be dispalyed." << endl;
return 0;
}