2015-05-12 15 views
10

我經常使用cout在我的代碼中的許多不同位置進行調試,然後我感到沮喪並且手動對它們進行評論。如何在運行時禁用cout輸出?

有沒有辦法在運行時抑制cout輸出?

更重要的是,假設我想要抑制所有cout輸出,但我仍然希望在終端中看到1個特定輸出(假設程序的最終輸出)。

是否可以使用打印到終端的「」其他方式「來顯示程序輸出,然後當抑制cout仍然可以看到用」「其他方式」「打印的東西時?

回答

13

不要使用cout用於調試目的,但定義一個不同的對象(或功能,或宏),通過調用向它,那麼你可以在一個地方禁用該功能或​​宏。

39

當然,你可以(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被清除。

0

看來你打印調試消息。您可以在Visual C++/MFC中使用TRACE,或者您可能只想創建一個處理它的Debug()函數。只有在設置了不同的標誌時,才能實現它。很多程序使用名爲verbose-v的命令行參數來控制其日誌和調試消息的行爲。

9

要禁止輸出,您可以從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; 
}