2017-08-15 37 views
0

我正在將結構指針傳遞給另一個.c文件中的函數。我是否需要將這個頭文件包含在兩個.c文件中?包括函數的.h文件

//test.h 
typedef struct { 
    int number; 

} STATS; 

//test.c 
#include "test.h" 
void function(){ 

    func2(s); 
} 

//stats.c 
//do I need : include "test.h" 
void func2(STATS * ptr){ 
    ptr->number = 10; 
} 
+2

是的。一次確保定義與聲明匹配,並且一次(或多次)使得使用該函數的代碼知道它是如何聲明的。標題使所有內容保持同步 - 因此,這非常重要。請注意,func2()函數也應該在頭文件中聲明,具有完整的原型。另外,還不清楚's怎麼進入東西 - 聲明和定義都沒有顯示出來。 –

+0

如果你在stats.c中不包含'test.h',我會期待編譯器抱怨,因爲它不知道'STATS'是什麼。 –

+0

是的,你需要test.h,因爲STATS沒有在stats.c中定義 – MCG

回答

1

是,stats.c需要爲了知道哪裏num構件處於STATS結構的結構定義。

如果只是將指針傳遞給其他函數,則不需要結構定義;你只需要一個結構類型名稱的前向聲明;所有結構指針都需要以這種方式兼容,並允許指針被視爲不透明的句柄。但由於func2訪問一個成員,它不是不透明的。

0

是的,你必須實例化結構類,因爲你聲明.h類中的數字變量