(本文是自己在学习是总结的自己所用到的几点知识,仅仅用作自己学习笔记使用,以后若有需要会更新)
#define DBGA(fmt, args...) printf(fmt"\n", #args);
#define DBGD(fmt, args...) printf("%s"fmt"\n",__FUNCTION__, #args);
#define DBGC(fmt, args...) printf(fmt"\n", ##args);
#define DBGB(fmt, args...) printf("[%s]: hello"fmt"\n", __FUNCTION__, #args);
int main(void)
{
char str[] = "helloeveryone";
DBGA("%s", "hello",
__FUNCTION__, dbga, str);
DBGD("%s", "hello", __FUNCTION__, dbgd, str);
DBGC("[%s]:
%s, %s", __FUNCTION__,
"dbgc", str); //此处是带##的
DBGB("%s", __FUNCTION__, dbgb);
}
打印结果:
"hello", __FUNCTION__, dbga, str
main"hello", __FUNCTION__, dbgd, str
[main]: dbgc, helloeveryone
[main]: hello__FUNCTION__, dbgb
可以看出,带#的基本上是按照字符替换来打印的(__FUNCTION__就没有打印出函数名称称),如果想打印还数名称的话,可以在宏定义的时候加入__FUNCTION__
我觉得用##还是比较好些
本文介绍了在C语言中使用DEBUG宏进行调试的一些实践经验,包括DBGA、DBGD、DBGC和DBGB四个宏定义,分别展示了如何打印变量、函数名以及字符串等内容。通过实例展示了带#和##运算符的宏如何工作,并分析了它们在打印输出时的不同效果。
871

被折叠的 条评论
为什么被折叠?



