C代码整洁之道--宏表示复杂抽象实现

//使用宏来替换复杂抽象的实现过程,如下面的函数中的
    epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);
ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer)
{
    ngx_epoll_conf_t  *epcf;


    epcf = ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);


    if (ep == -1) {
        ep = epoll_create(cycle->connection_n / 2);


        if (ep == -1) {
            ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
                          "epoll_create() failed");
            return NGX_ERROR;
        }
......
}
......
}


//下面理解下这个宏的过程表示
ngx_event_get_conf(cycle->conf_ctx, ngx_epoll_module);
struct ngx_cycle_s {
    void                  ****conf_ctx;
......
}
struct ngx_module_s {
    ngx_uint_t            ctx_index;
    ngx_uint_t            index;
......
}
#define ngx_event_get_conf(conf_ctx, module)                                  \
             (*(ngx_get_conf(conf_ctx, ngx_events_module))) [module.ctx_index];
 
#define ngx_get_conf(conf_ctx, module)  conf_ctx[module.index]
//由此可见这个结构上一个二维表[][]
//由module的index和ctx_index决定其所在位置,这个宏就是找到这个位置的指针,
//如果使用直接的代码实现方式,这部分代码显得凌乱,可见宏在代码的实现上有非常好的益处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值