我正在编写一个程序,我想轻松打开/关闭我的调试代码。这个程序不是生产水平 - 它是一个编程竞赛。
我只有一个文件main.cpp
,所以我认为调试变量可能是可以接受的。我考虑使用全局变量,如下所示:
bool DEBUG = true;
int main()
{
if (DEBUG)
{
// print debug statements and other debug code
}
// rest of program...
但是,我收到一条警告,表示我的DEBUG
变量从未使用,if (DEBUG)
总是评估为false。或者,我可以将DEBUG
变量放在main()
方法中:
int main()
{
bool DEBUG = true;
if (DEBUG)
{
// print debug statements and other debug code
}
// rest of program...
但是后来我得到一个编译器警告'Condition is always true . Any suggestions on how to easily switch on/off my
DEBUG`代码?对编译器问题的解释会很棒。
答案 0 :(得分:1)
常用方法是使用预处理器
#ifndef NDEBUG
// debug code
#endif
// or
#ifdef DEBUG
// debug code
#endif
虽然我在NDEBUG上工作过的一个项目是undef&d;并且被另一个项目取代,所以请检查它是否存在。
我也不会惊讶你的警告是因为还存在#define DEBUG。所以从不使用你的变量DEBUG。
通常DEBUG和NDEBUG由编译器定义。
答案 1 :(得分: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;
。boost::program-options
。