c - 如何在宏中使用 __func__

标签 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__ 并获得所需的结果?

最佳答案

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

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

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

关于c - 如何在宏中使用 __func__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24232678/

相关文章:

c - K22F 上的 I2C 初始化作为主机

javascript - 从 Javascript 中的 C float 组读取原始字节(转换为 JS 数组)

c - 如何立即关闭 C 中的程序?

c - 可变参数在 CC 编译器上的 AIX 5.3 中不起作用

clojure - 我怎样才能更地道地编写这个 Clojure 宏?

C可变参数

python - 将列表转换为字符串并允许使用分隔符

php - 函数类似于 php 中的 var_dump

function - 如何查找 PostgreSQL 中是否存在函数?

c - 在 gcc 中使用 -D 标志定义多字宏