C语言在C99已经支持了__func__和__VA_ARGS__,C++11也将他们纳入了支持的预定义宏。
__func__会返回所在函数的函数名,__VA_ARGS__是变长参数的宏定义,是指在宏定义中参数列表的最后一个为省略号的参数。
他们与__FILE__(返回文件名)及__LINE__(返回行号)结合,可用于打印调试信息:
#include <stdio.h>
#include <stdarg.h>
void pDebug(const char *file, const char *func, int line, const char *format, ...)
{
va_list argp;
va_start(argp, format);
printf("%s[%s|%d]:", file, func, line);//输出带有文件名,函数名,行号的调试信息
vprintf(format, argp);//输出可变参数信息
return;
}
#define PEDBUG(PFORMAT, ...) pDebug(__FILE__, __func__, __LINE__, PFORMAT, __VA_ARGS__)
void doHello()
{
PEDBUG("%s", "hello world");
}
int main()
{
doHello();
return 0;
}
运行程序输出:
main.cpp[doHello|17]:hello world