簡體   English   中英

C中頭文件中帶有struct參數的函數聲明

[英]Function declaration with struct parameter in header file in C

我的老師說:“創建頭文件,並將.c文件中所有函數的函數聲明放入頭文件中。還要將結構和宏放在頭文件中。請確保“保護”此文件免遭多次包含”

好吧,我通過使用來保護標題

#ifndef List_h
#define List_h
//My header code
#endif

我已將所有結構放在此頭文件中,並將其包含在我的.c文件中,並且一切正常。 我沒有使用任何宏,所以我沒有。 問題出在我嘗試執行函數聲明時。 這是我的函數:

int FunctionName(struct NameOfStruct *PointerToStruct){
//Code here
}

然后,我試圖在頭文件中聲明我的函數,如下所示:

int FunctionName(struct);

但是出現錯誤“在此函數之外看不到'struct NameOfStruct'的聲明”

我努力了:

int FunctionName(struct NameOfStruct *PointerToStruct);

但得到同樣的錯誤。 我應該如何在頭文件中聲明一個函數? 我在Google上發現的所有內容似乎都無效。 我究竟做錯了什么?

您需要在函數聲明之前定義(或至少聲明) struct NameOfStruct

struct NameOfStrunct {
    …
};
int FunctionName(struct NameOfStruct *PointerToStruct);

順序很重要。 對於錯誤消息的解釋是,首先提到的struct NameOfStruct聲明了在其中找到其作用域的結構名稱。 如果首先提到的是頂級聲明,則該名稱在文件的其余部分仍然有效。 如果在函數定義中,則該名稱僅在編譯此函數時保持有效。 如果在函數原型中,則該名稱僅對原型本身有效,並且沒有意義,因為您將無法使用相同的結構將參數傳遞給函數或函數的定義。

暫無
暫無

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

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