posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

巧妙使用宏定义调试查看变量值

Posted on 2007-12-05 19:37 魔のkyo 阅读(2115) 评论(2)  编辑 收藏 引用 所属分类: Programming
#include <stdio.h>

#define Watch(X)  printf( #X "=%d\n",(X))

int main()
{
    
int a=1;
    
int b=2;
    Watch(a);
    Watch(a
+b);
}
对于我们这些不喜欢用调试工具的人,往往在程序中使用printf帮助调试,提交代码前再将调试用的printf全部注释掉。
最近发现一个更便捷的方法,如上。提交时只需#define Watch(X)  //printf( #X "=%d\n",(X)) 更好的写法见一楼

在宏定义中运用了两个不常用的语法,一个是#X,一个是字符串拼接
#X表示提取参数的名字,把它变成字符串。
而当两个字符串之间除空白符以外没有任何东西,编译器会自动认为这两个字符串是连在一起的字符串。
即"he" "llo" 相当于"hello"

Feedback

# re: 巧妙使用宏定义调试查看变量值  回复  更多评论   

2008-08-23 00:16 by 魔のkyo
一个更好的宏是这样的
#define dbg(x) cerr<<#x<<" : "<<x<<endl
首先他可以输出各种类型的x,其次他输出到错误流,在OJ上提交时即使不注释掉也不会影响评判结果

# re: 巧妙使用宏定义调试查看变量值  回复  更多评论   

2009-01-23 23:49 by 魔のkyo
#define DEBUG
#define LOG_FILE __FILE__".log"

#ifdef DEBUG
#define dbgprint(format,args...) fprintf(stderr, format, ##args)
#define logprint(format,args...) {FILE* fp=fopen(LOG_FILE,"a+");fprintf(fp,"line %d: "format,__LINE__,##args);fclose(fp);}
#else
#define dbgprint(format,args...)
#define logprint(format,args...)
#endif
只有注册用户登录后才能发表评论。