C语言在C99已经支持了__func__和__VA_ARGS__,C++(11)也将他们纳入了支持的预定义宏。
__func__会返回所在函数的函数名,__VA_ARGS__是变长参数的宏定义,是指在宏定义中参数列表的最后一个为省略号的参数。
他们与__FILE__(返回文件名)及__LINE__(返回行号)结合,通常用于打印调试信息:
#include#include 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__)//通过宏定义将__func__与__LINE__在调用处展开 void doHello() { PEDBUG("%s", "hello world"); } int main() { doHello(); return 0; } //输出:doHello:17-> hello world



