簡體   English   中英

具有錯誤簽名的函數定義中的函數聲明?

[英]Function declaration within a function definition with wrong signature?

我遇到了以下代碼:

delete_list(list **l, item_type x)
{
    list *p; /* item pointer */
    list *pred; /* predecessor pointer */
    list *search_list(), *predecessor_list();

    p = search_list(*l,x);
    if (p != NULL) {
        pred = predecessor_list(*l,x);
        if (pred == NULL) /* splice out out list */
            *l = p->next;
        else
            pred->next = p->next;
        free(p); /* free memory used by node */
    }
}

我不太明白這行是什么意思:

    list *search_list(), *predecessor_list();

這是函數聲明嗎? 如是;

  1. 為什么在函數內有函數聲明? 我認為函數聲明應該在所有函數之外。
  2. 為什么聲明的簽名(參數)與代碼中這些函數的調用方式不匹配?

如果這不是函數聲明,那是什么?

是的,它是幾個函數原型聲明。

作為任何聲明,您都可以將它們包含在函數中。 它是其他函數內部無法提供的函數定義 (即其實現)。

至於參數不匹配,這就是C的工作方式。 如果您不聲明任何參數,則該函數將被聲明為具有未知數量的未知類型的參數,並且您真的可以調用它們傳遞幾乎所有內容,並且編譯器將不知道它是對還是錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM