我需要获取传递给 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__ ).
有了这个我会得到“主要”。
最佳答案
正如其他人所建议的那样,最简单的方法就是对名称进行硬编码并将其传入。为了避免输入两次名称,我通常使用宏来处理此类事情,如下所示:
#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);
}
关于捕获C函数参数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55362526/