c 字符串化和 __function__

c stringification and __function__

我正在尝试添加一个编译局部变量的 c 宏 初始化为函数名..

例如

 void foo (void)
 {
 stubmacro;
 }


 void bar (void)
 {
 stubmacro;
 }

基本上编译为:

 void foo (void)
 {
 char*function_name="foo";
 }


 void bar (void)
 {
 char*function_name="bar";
 }

我在使用 C 预处理器宏方面一直遇到困难, 特别是在字符串化方面

宏使用预定义的 FUNCTION ..

#define stubmacro char*function_name=##_FUNCTION__

无论如何,我的 stubmacro 宏是错误的,我希望得到一些帮助 在上面

只需使用 __func__,这是一个预定义的字符串,可以满足您的需要:

The identifier __func__ shall be implicitly declared by the translator as if, immediately following the opening brace of each function definition, the declaration

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

appeared, where function-name is the name of the lexically-enclosing function.

您可以参考以下代码:

#include <stdio.h>

#define stubmacro char *func = __func__;

void foo (void)
{
    stubmacro;
    printf("foo = %s\n", func);
}

void bar (void)
{
    stubmacro;
    printf("bar = %s\n", func);
}

int main(void)
{
    foo();
    bar();
    return 0;
}

输出将是:

foo = foo
bar = bar

这里__func__是一个宏,将被替换为使用它的函数名

也可以使用宏作为函数名称,您可以直接在函数中打印,如下所示

void foo (void)
{
    printf("foo = %s\n", __func__);
}