c语言函数的参数定义无意义,c语言函数指针指向的函数的参数与定义该指针的原形参数个数不一致...

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编译的不同"

必有一款适合你!

194839106.gif

------解决思路----------------------

C里面是允许的,C++不允许

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值