我需要获取传递给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__ ).
有了这个我会得到“主要”。
答案 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);
}