捕获C函数参数名称

时间:2019-03-26 16:59:35

标签: c c-preprocessor

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

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__ ).

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

1 个答案:

答案 0 :(得分:3)

正如其他人建议的那样,最简单的方法是对名称进行硬编码并将其传递。为避免不得不两次键入名称,我通常使用宏来进行此类操作,例如:

#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);
}