c语言函数指针指向的函数的参数与定义该指针的原型参数个数不一致
最近研究了一下appweb,是c代码,在代码中发现一个问题:函数指针指向的函数与定义该函数指针的原型的参数个数不一致
typedef void (*MprEventProc)(void *data, struct MprEvent *event);//函数指针原型typedef struct MprWaitHandler {
int desiredMask; /**
int presentMask; /**
int fd; /**sock) */
int notifierIndex; /**
int flags; /**
void *handlerData; /**
MprEvent *event; /**
MprWaitService *service; /**
MprDispatcher *dispatcher; /**
MprEventProc proc; /**
struct MprWorker *requiredWorker; /**
struct MprThread *thread; /**
MprCond *callbackComplete; /**
} MprWaitHandler;MprWaitHandler *wp;
(wp->proc)(wp->handlerData, NULL);//函数指针调用的地方//函数指针赋值的地方
wp->proc = acceptConn;//acceptConn 的函数原型
static void acceptConn(HttpEndpoint *endpoint)
{
MprDispatcher *dispatcher;
MprEvent *event;
MprSocket *sock;
MprWaitHandler *wp;
SK_ERROR(("ME_EVENT_NOTIFIER:%d acceptConn[0x%x] endpoint[0x%x]",ME_EVENT_NOTIFIER, acceptConn,endpoint));
if ((sock = mprAcceptSocket(endpoint->sock)) == 0) {
return;
}
wp = endpoint->sock->handler;
if (wp->flags & MPR_WAIT_NEW_DISPATCHER) {
dispatcher = mprCreateDispatcher("IO", MPR_DISPATCHER_AUTO);
} else if (wp->dispatcher) {
dispatcher = wp->dispatcher;
} else {
dispatcher = mprGetDispatcher();
}
event = mprCreateEvent(dispatcher, "AcceptConn", 0, httpAcceptConn, endpoint, MPR_EVENT_DONT_QUEUE);
event->mask = wp->presentMask;
event->sock = sock;
event->handler = wp;
/*
Optimization to wake the event service in this amount of time. This ensures that when the HttpTimer is scheduled,
it won't need to awaken the notifier.
*/
mprSetEventServiceSleep(HTTP_TIMER_PERIOD);
mprQueueEvent(dispatcher, event);
}
我的问题是 acceptConn 函数只有一个参数,而 wp->proc 函数指针的原型却有两个参数,参数个数不一致,为什么编译不报错,而且调用也不会产生任何问题?
------解决思路----------------------
搜
“堆栈平衡”
“调用约定”
“参数默认值”
"C和CPP编译的不同"
必有一款适合你!
------解决思路----------------------
C里面是允许的,C++不允许