2015-01-05 61 views
0

我想添加一个C宏来编译的局部变量 其初始化函数名..ç字串和__FUNCTION__

例如。

void foo (void) 
{ 
stubmacro; 
} 


void bar (void) 
{ 
stubmacro; 
} 

将基本上编译如下:

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


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

我一直有困难的时候与C预处理器宏, 尤其是当它涉及到字串

宏使用prefined 功能 ..

#define stubmacro char*function_name=##_FUNCTION__ 

反正我stubmacro宏是错误的,而且我喜欢一些帮助 它

+2

“......我的stubmacro宏是错误的......”您可能想澄清一下,对于阅读您的问题的人来说。而且,如果直接分配给指针,则应该真正使用'const char *'。最后,'__FUNCTION__'已经是一个带引号的字符串了,所以我不确定你想要的是什么。 – WhozCraig

回答

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__); 
} 
+1

你为什么要那样做?这太复杂了,只需使用'__func__'就不需要声明任何东西。 –

+1

@JensGustedt:是的,这是最好的办法。但是由于OP问他想要一个宏,我使用了这个宏。还根据您的评论更新了我的答案 –

5

只要使用__func__,这是一个预定义的字符串,做你所需要的:

标识符__func__应由 翻译隐含声明那样的话,紧随其后的每个 函数定义的开括号,声明

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

出现,其中function-name是 词汇封闭函数的名称。