2014-10-10 59 views
0

我正在編寫一個程序,我希望輕鬆地打開/關閉我的調試代碼。這個程序不是生產級別 - 這是一個編程競賽。C++:爲程序使用調試變量時的範圍界定問題

我只有一個文件,main.cpp,所以我認爲調試變量可能是可以接受的。我認爲使用全局變量,如下所示:

bool DEBUG = true; 

int main() 
{ 

    if (DEBUG) 
    { 
     // print debug statements and other debug code 
    } 
    // rest of program... 

不過,我得到我的DEBUG變量從未使用過if (DEBUG)一直在評估假警告。或者,我可以把我的DEBUG變量main()方法中:

int main() 
{ 
    bool DEBUG = true; 
    if (DEBUG) 
    { 
     // print debug statements and other debug code 
    } 
    // rest of program... 

但後來我得到一個編譯器警告「狀態總是正確的. Any suggestions on how to easily switch on/off my DEBUG`代碼?編譯器問題的解釋會很好。

+0

通常,這些標誌是使用某些外部刺激設置的。例如reg鍵設置。您應該探索此選項。 – EdChum 2014-10-10 08:20:12

回答

1

常見的方法是使用預處理器

#ifndef NDEBUG 
// debug code 
#endif 

// or 

#ifdef DEBUG 
// debug code 
#endif 

雖然一個項目,我在工作NDEBUG被undef'd並用另一個代替,從而檢查它是否存在。

我也不會驚訝你的警告是因爲還有一個#define DEBUG已經存在。所以你的變量DEBUG永遠不會被使用。

通常DEBUG和NDEBUG由編譯器定義。

0

[...]我想輕鬆打開/關閉我的調試代碼[...]關於如何輕鬆打開/關閉myDEBUG`代碼的任何建議?

考慮一下:

bool debug = false; // set default value on compilation 
int main(int argc, char **argv) 
{ 
    using std::literals::string_literals; 

    std::vector<std::string> args{ argv, argv + argc }; 
    if(std::end(args) != std::find(std::begin(args), std::end(args), "-d"s)) 
     debug = true; // reset debug flag based on runtime parameter 
    // use debug from this point onwards 
} 

用法:

$ ./your-app # run with compiled flag 
$ ./your-app -d # run with debug information 

注:

  • "-d"s結構需要using std::literals::string_literals;
  • 您可以設置基於彙編宏默認調試標誌(DEBUG,_DEBUG和NDEBUG是最常見的在Windows上)
  • 考慮使用boost::program-options如果你想更復雜的參數處理。