我正在尝试创建一个宏,该宏将根据调用宏的函数名称修改数据结构中的字段,请参见下文:
#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__
并获得所需的结果?
__func__
不是宏。这是一个隐式创建的变量:
static const char __func__[] = "function-name";
你不能在编译时使用它的值。
我是一名优秀的程序员,十分优秀!