【发布时间】:2011-03-10 12:07:42
【问题描述】:
当我在研究一些 RPC 存根例程时,在 Unix 中由 RPCGEN -a msg.x 生成的 C 源文件。我遇到了一些让我感到困惑的函数指针。
在服务器存根文件 - msg_svc.c 中,有一个类似的声明
char *(*local)();
它声明了一个指向函数的指针,该函数不带参数并返回一个字符指针
在服务器文件-msg_server.c中,有一个函数定义为
savemsg_1(argp, rqstp)
char **argp;
struct svc_req *rqstp;
{
some code
}
回到服务器存根文件 - msg_svc.c,我看到了执行函数指针转换的代码
local = (char *(*)()) savemsg_1;
后来被调用
result = (*local)(&argument, rqstp);
其中参数和 rqstp 由以下定义
union {
char *savemsg_1_arg;
int readmsg_1_arg;
} argument;
和
struct svc_req *rqstp;
我的问题是为什么会这样?我已经对函数指针的 google/stackoverflow 进行了研究。在转换为不接受任何参数的函数指针后,并通过具有不匹配参数的函数指针调用函数(在这种情况下接受 2 个参数)应该会产生未定义的行为。
来源位于msg_svc.c
我非常感谢任何意见。谢谢
【问题讨论】:
标签: pointers function-pointers rpc