我有以下代码。
typedef pid_t (*getpidType)(void);
pid_t getpid(void)
{
printf("Hello, getpid!\n");
getpidType* f = (getpidType*)dlsym(RTLD_NEXT, "getpid");
return f(); // <-- Problem here
}
编译器抱怨called object ‘f’ is not a function
。这里发生了什么?我没有以正确的方式声明和使用函数指针 f 吗?
答案 0 :(得分:9)
getpidType
已经是指针,因此放弃*
:
getpidType f = (getpidType)dlsym(RTLD_NEXT, "getpid");
(更好的是,也放弃显式演员:
getpidType f = dlsym(RTLD_NEXT, "getpid");
由于dlsym
返回void*
并且void*
可以隐式转换为任何其他指针类型,因此不需要强制转换。它甚至可以隐藏错误。)