根据编译器,有两种方式:
1 部分编译器支持函数名默认宏定义。
编译器提供一个自带的宏,名字有__FUNCTION__和__func__两种,因编译器不同而不同。
如果支持该类宏情况下,这个宏实际值为一个字符串,内容为调用宏位置的函数名。
所以,要输出函数名,可以
#define LOG(fmt, args...) printf("%s:"fmt,__FUNCTION__,##args)
2 如果编译器本身不支持,那么就只能在定义宏的时候,准备一个参数,用来传递函数名,并在调用的时候传递。
比如
#define LOG(func, fmt, args...) printf("%s:"fmt, #func, ##args)
#define NOTIFY_LOG(PFUN, FUN, PARAM) \
TCHAR buf[512] = {0}; \
wsprintf(buf,L"%s%s\n",#PFUN,#FUN); \
OutputDebugString(buf); \
if (NULL != (PFUN)) \
{ \
PFUN->FUN PARAM; \
}