我正在尝试添加一个编译局部变量的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宏是错的,我会喜欢一些帮助 在它上面
答案 0 :(得分:5)
只需使用__func__
,这是一个预定义的字符串,可以满足您的需求:
标识符
__func__
应由隐式声明 翻译好像,紧跟着每个人的开口支撑 函数定义,声明
static const char __func__[] = "function-name";
出现了,其中function-name是其名称 词汇封闭功能。
答案 1 :(得分:2)
您可以参考以下代码:
#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__);
}