(本文是自己在学习是总结的自己所用到的几点知识,仅仅用作自己学习笔记使用,以后若有需要会更新)
#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__
我觉得用##还是比较好些