2012-07-02 74 views
1

我工作的一個相當簡單的C程序與主文件,vector.c,vector.h,但我遇到了這些問題:I2C資源用於處理多個文件的程序

  • 在哪裏如果在兩個c文件中都需要它提供的聲明,我會將.h文件包含在內?
  • 我在哪裏放置所有3個文件中需要的typedefs?

似乎gcc抱怨不管我做什麼。

任何人都可以回答這些問題,或者指向我可以閱讀的資源嗎?

回答

2

如果在兩個c文件中都需要它提供的聲明,那麼我在哪裏放置.h文件的include?

將在每個C文件,要求頭定義include聲明,你的情況,在main.c中vector.c。使用include guards總是一個好主意,並且如果編譯器抱怨已經定義或多重定義的符號,則需要使用它。

在哪裏可以在所有3個文件中放入typedefs?

這取決於:

  • 如果typedefs是必要的,或具體到矢量API,然後把它們放在vector.h
  • 如果它們與您的矢量界面無關,即它們特定於main.c,那麼它們可能屬於那裏。
  • 但你提的是他們需要的所有3個文件,因此如果這些typedefs是不是你的矢量界面一部分,那麼他們很可能屬於第3頭文件,例如像COMMON.H,這也可能包含在項目中的其他文件中。
2

非常自然:

  • 您包括從哪個C文件(S)需要它的頭。
  • typedef s是聲明,所以它們非常適合放在頭文件中。

有時您可能需要防止多重包含,如果您有包含標題的標題,但對於您不需要的情況。請記住,每個C文件都是自行編譯的。當然,千萬不要使用帶有C文件的#include

+0

+1我會放下「有時」位,並將OP指向包含守衛的描述:保護所有標題就好像它們包含多次一樣,要比在圈子中運行試圖找出原因要容易得多當其他人添加一個看起來很天真的'#include'後,你的編輯開始打破了。:) – dasblinkenlight

相關問題