【问题标题】:How to use __func__ in macros如何在宏中使用 __func__
【发布时间】: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 之类的东西,并自动解析名称

标签: c function macros


【解决方案1】:

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

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

你不能在编译时使用它的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 2022-01-17
    • 1970-01-01
    • 2013-02-24
    • 2015-11-29
    • 2017-05-27
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多