c stringification和__function__

时间:2015-01-05 12:43:47

标签: c c-preprocessor

我正在尝试添加一个编译局部变量的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宏是错的,我会喜欢一些帮助  在它上面

2 个答案:

答案 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__);
}