在没有参数的函数内调用函数

时间:2018-05-11 06:48:38

标签: c function parameters keil

调用函数而不在另一个函数中调用其参数有点令人困惑,如下所示:

ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0);

output_cbstatus_cb是其参数未设置的函数,其定义必须写在上面的行中,而不是它们被调用的行。

功能定义:

static void status_cb(ppp_pcb *pcb, int err_code, void *ctx) {

    struct netif *pppif = ppp_netif(pcb);

    switch(err_code) {
        case PPPERR_NONE: {
            printf("status_cb: Connected\n");
            printf("   our_ipaddr  = %s\r\n", ipaddr_ntoa(&pppif->ip_addr));
            printf("   his_ipaddr  = %s\r\n", ipaddr_ntoa(&pppif->gw));
            printf("   netmask     = %s\r\n", ipaddr_ntoa(&pppif->
            break;
        }
        case PPPERR_PARAM: {
            printf("status_cb: Invalid parameter\r\n");
            break;
        }
    }
}

static u32_t output_cb(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx)
{
    return HAL_UART_Transmit_IT(&huart1, data, sizeof(data));
}

int main(void)
{
    ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0);
}

status_cb在不给err_code作为参数的情况下打印什么?何时或如何评估status_cboutput_cb

pppos_create的定义如下:

ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb,
       ppp_link_status_cb_fn link_status_cb, void *ctx_cb)
{
    pppos_pcb *pppos;
    ppp_pcb *ppp;

    pppos = (pppos_pcb *)LWIP_MEMPOOL_ALLOC(PPPOS_PCB);
    if (pppos == NULL) {
        return NULL;
    }

    ppp = ppp_new(pppif, &pppos_callbacks, pppos, link_status_cb, ctx_cb);
    if (ppp == NULL) {
        LWIP_MEMPOOL_FREE(PPPOS_PCB, pppos);
        return NULL;
    }

    memset(pppos, 0, sizeof(pppos_pcb));
    pppos->ppp = ppp;
    pppos->output_cb = output_cb;
    return ppp;
}

亲切的问候

0 个答案:

没有答案