C++ 在C+中调试+;
我偶然发现了这个代码片段。你能解释一下如何在程序中使用这个调试吗C++ 在C+中调试+;,c++,debugging,C++,Debugging,我偶然发现了这个代码片段。你能解释一下如何在程序中使用这个调试吗 #ifdef TESTING #define DEBUG fprintf(stderr, "====TESTING====\n") #define VALUE(x) cerr << "The value of " << #x << " is " << x << endl #define debug(...) fprintf(stderr, __VA_ARGS__)
#ifdef TESTING
#define DEBUG fprintf(stderr, "====TESTING====\n")
#define VALUE(x) cerr << "The value of " << #x << " is " << x << endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define DEBUG
#define VALUE(x)
#define debug(...)
#endif
#ifdef测试
#定义调试fprintf(stderr,“==测试===\n”)
#define VALUE(x)cerr我宁愿使用合适的调试器,也不愿使用这些宏,但如果您确实需要使用这些宏,以下是您的操作方法:
#include <iostream>
using namespace std; // better remove this and change the macro with cerr and endl instead
#define TESTING
#ifdef TESTING
#define DEBUG fprintf(stderr, "====TESTING====\n")
#define VALUE(x) cerr << "The value of " << #x << " is " << x << endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define DEBUG
#define VALUE(x)
#define debug(...)
#endif
int main(int argc, char **argv) {
int a = 100;
DEBUG; // prints "====TESTING===="
VALUE(a); // prints "The value of a is 100"
debug("%d + %d = %d", 1, 2, 1 + 2); // prints "1 + 2 = 3"
return 0;
}
如果删除#define TESTING
,则不会得到任何输出,因此可以根据您是否正在“测试”来删除/设置该输出
或者,通常可以使用构建系统/IDE提供此类定义,根据上下文自动设置/重置。例如,在Visual Studio中:
如何使用此功能进行调试?您可以将其丢弃并使用调试器;)当有更好的方法时,调试不值得将所有代码都与宏混在一起。事实上,什么是不清楚的?您是否尝试调用宏以查看发生了什么?如果您在编译期间定义了-DDEBUG
,或者在该代码段之前明确定义了DEBUG
或TESTING
,编译器将在代码中使用相应的宏。如果您定义了DEBUG,那么您将在代码中获得更多的调试报告(例如代码段中的cerr语句)。跟踪比(直接)调试更多吗?我最喜欢的部分是,它假定使用名称空间std存在代码>(或至少使用std::cerr;使用std::endl;
)。要么该标题强制使用这些名称,要么使用名称空间std
在任何地方都会出现。很好的建议,我添加了一个例子。
====TESTING====
The value of a is 100
1 + 2 = 3