我有以下代码。
typedef pid_t (*getpidType)(void);
pid_t getpid(void)
{
printf("Hello, getpid!\n");
getpidType* f = (getpidType*)dlsym(RTLD_NEXT, "getpid");
return f(); // <-- Problem here
}
编译器提示调用的对象“f”不是函数
。这里发生了什么?我没有以正确的方式声明和使用函数指针 f 吗?
最佳答案
getpidType
已经是一个指针,所以删除 *
:
getpidType f = (getpidType)dlsym(RTLD_NEXT, "getpid");
(更好的是,也删除显式转换:
getpidType f = dlsym(RTLD_NEXT, "getpid");
由于 dlsym
返回 void*
并且 void*
可以隐式转换为任何其他指针类型,因此不需要强制转换。它甚至可能隐藏错误。)
关于被调用对象不是函数或函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10702723/