【发布时间】:2014-06-15 18:21:19
【问题描述】:
我正在尝试创建一个宏,它将根据调用宏的函数名称修改数据结构中的字段,见下文:
#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__并获得想要的结果?
【问题讨论】:
-
不,没有简单的方法可以实现您的愿望。
-
@BasileStarynkevitch,有什么难的方法?
-
也许使用MELT定制GCC
-
对于您的实际问题可能有更简洁的解决方案。真正的问题是什么?
-
我想计算函数被调用了多少次,为简单起见,我想使用类似 COUNT_THIS_FUNCTION 之类的东西,并自动解析名称