首页 > 解决方案 > 捕获 C 函数参数名称

问题描述

我需要获取传递给 C 函数的函数的名称。我希望一些允许在编译时获得 C 函数名称的 ascii 版本的 c 宏。

void foo( void )
{
    // nothing
}

typedef void (*pFunction)( void );

void ScheduleCallback( pFunction fName, int x, int y )
{

    // Is it possible to get the name "foo" in this routine?

} 

main()
{

    ScheduleCallback( foo, 3, 4 );

}

c中是否有参数的宏?

我试过使用 FUNCTION 然后为调用过程做一个宏,比如

ScheduleCallback( foo, 3, 4, __FUCNTION__ ).

有了这个,我会得到“主要”。

标签: cc-preprocessor

解决方案


正如其他人建议的那样,最简单的方法是硬编码名称并将其传入。为了避免输入两次名称,我通常使用宏来处理这类事情,如下所示:

#define FUNC_WITH_NAME(x) x,#x

typedef void (*pFunction)();

void foo() {
}

void ScheduleCallback(pFunction func, char *name, int x, int y) {
    printf("scheduling %s\n", name);
}


int main() {
    ScheduleCallback(FUNC_WITH_NAME(foo),3,4);
}

推荐阅读