, пока я изучал некоторые заглушки RPC, исходные файлы C, сгенерированные RPCGEN -a msg.x в Unix. Я наткнулся на какой-то указатель на функцию, которая меня смущает.
В файле-заглушке сервера - 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
Я был бы очень признателен за любые материалы. Спасибо