2015-04-02 195 views
3

我們正在開始一個相當大的項目,其中涉及不同語言的部分。我們決定將編譯時的某個部分從JSON轉換爲必要的C structs(以及其他系統部分的其他結構)。C中的靜態構造函數

該結構在.h中定義,聲明將類似於const static struct MCSCommandOptionsMessage mcs_command_message_list[] =,然後是所需格式的參數列表。

現在的問題是:如果自動生成的結構聲明文件是.h,還是隻有這個結構有.c更好?爲什麼?

+0

需要包含多少個文件?如果不止一個,你不能在頭文件中聲明這個聲明,因爲至少鏈接器會報錯。 – user1666959 2015-04-02 10:53:01

回答

2

雙方將是可能的,申報的.h或只有一個.c文件中可以訪問結構。如果結構定義類似於接口和/或您生成幾個結構,如果將它們放在.h文件中會很好。它將定義合同。如果存在多個結構實例,則必須將結構定義放入.h文件中。

如果你想表達隔離並強調該結構是私人事務,那麼你可以在.c文件中定義它。

0

通常.h文件被用作「包含」文件,並且不是直接編譯的,這是因爲它們中的代碼不應該改變,因爲它們應該定義一個接口。請記住,如果結構中有任何更改並且它們位於.h文件中,那麼您必須重新編譯使用該結構的任何內容。如果結構在.c文件中,那麼每次編譯時都會重新編譯。

此外,如果結構是在.h文件,你可以方便地用它在不同的.c文件

+0

在C中,關鍵字static表示私有。沒有不同的.c文件可以訪問結構。 – harper 2015-04-02 10:49:38