pyt*_*nic 3 c linux gcc glibc x86-64
我有以下代码.
typedef pid_t (*getpidType)(void);
pid_t getpid(void)
{
printf("Hello, getpid!\n");
getpidType* f = (getpidType*)dlsym(RTLD_NEXT, "getpid");
return f(); // <-- Problem here
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说called object ‘f’ is not a function.这里发生了什么?我没有以正确的方式声明和使用函数指针f吗?
getpidType已经是一个指针,所以放下*:
getpidType f = (getpidType)dlsym(RTLD_NEXT, "getpid");
Run Code Online (Sandbox Code Playgroud)
(更好的是,放弃显式演员:
getpidType f = dlsym(RTLD_NEXT, "getpid");
Run Code Online (Sandbox Code Playgroud)
由于dlsym返回void*并且void*可以隐式转换为任何其他指针类型,因此不需要强制转换.它甚至可以隐藏错误.)
| 归档时间: |
|
| 查看次数: |
6165 次 |
| 最近记录: |