2017-08-25 20 views
1

我剛剛分離源文件。 。 是否有可能將我定義的類型分享給任何其他源文件? 。 。 。源文件中的共享類型定義

這是我在myTypeDef.h

typedef struct 
{ 
    int x, y, w, h; 
    short life; 
}Man; 

定義如果我創建一個新的.h(名爲draw.h)文件,將繪製這樣的形象:

#include "myTypeDef.h" 


void rendererFunction(Man *man); 

然後我創建將執行什麼在draw.h這樣的.C(名爲draw.c)文件:

#include "draw.h" 

void rendererFunction(Man *man) 
{ 
    draw(man->x, man->y, man->w, man->y); 
} 

那麼,如果我還CREA建立一個update.h(和update.c for implementation)文件來更新他的位置?我真的必須將draw.h連接到update.h才能獲得我的類型定義的對象嗎?還是有沒有其他方式共享類型定義的對象,而不重複定義,當我在我的主要包括.h's?

我希望有人能幫助我。謝謝

+0

ok先生。我會嘗試編輯並儘可能縮短。感謝您的建議。 – Bicolano

+0

@KenWhite。這個編輯好嗎先生?我希望你能幫助我。我只是混淆了我學到的這個新概念。代碼的分離。 – Bicolano

+0

好得多。謝謝。 :-) –

回答

0

在你的update.h,只是include "myTypeDef.h"。就像你對draw.hdraw.c所做的一樣;

或者在您的draw.hupdate.h中,只需使用句子struct Man;來聲明結構。並且在您的draw.cupdate.c中使用include "MyTypeDef.h"

+0

不,先生。我認爲我不能這樣做,因爲當我在main中包含draw.h和update.h時,會重複定義我的「Man」..因此,編譯器錯誤。 – Bicolano

1

c頭文件中常見的習慣用法是包容警衛。這些使用預處理器來防止諸如多個定義之類的事情。他們看起來是這樣的:

#ifndef MYMODULE_MYFILENAME_H 
#define MYMODULE_MYFILENAME_H 
.... Your definitions.... 
#endif 

這可以讓你始終包括含有什麼給定的文件正在使用,即使其他一些文件發生也包括你所需要的標頭中的標頭。事實上,這是一個很好的做法,以便如果稍後您重構一個頭文件以不再包含所需的文件,則某些看起來不相關的代碼不會開始無法編譯。