如何在宏中使用__func__

时间:2014-06-15 18:21:20

标签: c function macros

我正在尝试创建一个宏,它将根据调用宏的函数名修改数据结构中的字段,如下所示:

#define REGISTER(func_name) data.func_name##_n++

struct data
{
    int func_name_n;
} data;

void func_name(void)
{
    REGISTER(func_name);
}

int main(void)
{
    func_name();
    return 0; 
}

我想使用__func__宏,因此用户只需输入REGISTER即可自动传递函数名称:

#define REGISTER(func_name) data.func_name##_n++
#define REGISTER_WRAP REGISTER(__func__)

REGISTER_WRAP;

但是我收到以下错误:

error: ‘struct data’ has no member named ‘__func___n’

有没有办法在宏中使用__func__并获得所需的结果?

1 个答案:

答案 0 :(得分:2)

__func__不是宏。它是一个隐式创建的变量:

static const char __func__[] = "function-name";

您无法在编译时使用其值。