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__);
}
我正在尝试添加一个编译局部变量的 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__);
}