捕获C函数参数名

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

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

最佳答案

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

#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/

相关文章:

c - 语法错误 - 标记 ";"在 "variable name"之前插入

比较 C 函数中的三个 float

c++ - 如何在 C++ 中定义文件范围符号

c++ - GCC 4.7/Clang 3.2 中的宏替换失败

c++ - GCC 和 VC++ 预处理器的意外行为

c++ - 在变量宏扩展中我的逗号在哪里消失?

c - 如何编写一个 C 程序来计算 n 个数字的除法和减法?

arrays - 在 C 中读取命令行参数并检查它是一个数字

c - 访问c中的不同驱动器

c++ - 将文件包含为字符串