c - 捕获 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__ ).
有了这个,我会得到“主要”。
解决方案
正如其他人建议的那样,最简单的方法是硬编码名称并将其传入。为了避免输入两次名称,我通常使用宏来处理这类事情,如下所示:
#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);
}
推荐阅读
- swift - 如何在swift中仅使用角半径为3边添加阴影?
- android - 启动器应用程序图标模糊/在 Play 商店和本地通知 (Flutter) 的暗模式下看不到
- python - imap_tools 响应状态“正常”预期但“否”收到错误
- docker - 通过 docker 运行时无法复制已编辑的 swagger API 文档
- php - 如何在 Laravel 8 中添加动态用户角色以及访问控制
- android - 在android中的视频中添加文本水印
- amazon-web-services - 为什么 s3a 的性能远低于我用 cosbench 进行的基准测试?
- python - 根据条件有效地从现有列创建新的元素列
- python - 'pip install' 忽略提供的版本并尝试安装最新版本
- python - 将 API 密钥作为环境变量添加到 Google App Engine 的最佳方法是什么?