我正在尝试设置一个带有条件调试的项目。我想要的是有一个宏debug
,当我在 Debug模式下运行时,它被#defined 到某种printf/cout/anything,而当我在生产模式下运行时,它被#defined 到null 语句。我该怎么做:
我已经尝试使用宏 _DEBUG
但无论我在哪种模式下运行,我总是看到我的参数打印:
struct debugger{template<typename T> debugger& operator ,(const T& v){std::cerr<<v<<" ";return *this;}}dbg;
#if _DEBUG
#define debug(...) {dbg,__VA_ARGS__;std::cerr<<std::endl;}
#else
#define debug(...) // Just strip off all debug tokens
#endif
主要是:
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a=1,b=2,c=3;
debug(a,b,c);
cin>>a;
}
如果有帮助,我正在使用 Visual Studio 2012
最佳答案
您示例中的代码是正确的。问题在于定义 _DEBUG
的来源。在正确的设置中,它应该来自/不来自您的 MSVC 项目,而不是来自其他任何地方。在这种情况下,根据构建类型,您将获得预期的结果。
很可能您已在自己的代码或您包含的某个 header 中的某处定义了它。
您的帖子中没有足够的信息来推断 _DEBUG
的真正来源。
在 Debug模式下,来自 MSVC 的定义如下所示:
#define _DEBUG
这意味着即使在 DEBUG 构建中你也不应该看到任何东西。看到输出后,这意味着 defn 存在并且不为空。这个定义不是来自 MSVC。
关于c++ - Visual C++ 条件调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020005/