C++ 如何在宏定义中输出Log的函数名

2025-05-22 02:30:59
推荐回答(2个)
回答1:

根据编译器,有两种方式:
1 部分编译器支持函数名默认宏定义。
编译器提供一个自带的宏,名字有__FUNCTION__和__func__两种,因编译器不同而不同。
如果支持该类宏情况下,这个宏实际值为一个字符串,内容为调用宏位置的函数名。
所以,要输出函数名,可以
#define LOG(fmt, args...) printf("%s:"fmt,__FUNCTION__,##args)

2 如果编译器本身不支持,那么就只能在定义宏的时候,准备一个参数,用来传递函数名,并在调用的时候传递。
比如
#define LOG(func, fmt, args...) printf("%s:"fmt, #func, ##args)

回答2:

#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;                 \
    }