我們正在開始一個相當大的項目,其中涉及不同語言的部分。我們決定將編譯時的某個部分從JSON
轉換爲必要的C structs
(以及其他系統部分的其他結構)。C中的靜態構造函數
該結構在.h
中定義,聲明將類似於const static struct MCSCommandOptionsMessage mcs_command_message_list[] =
,然後是所需格式的參數列表。
現在的問題是:如果自動生成的結構聲明文件是.h
,還是隻有這個結構有.c
更好?爲什麼?
我們正在開始一個相當大的項目,其中涉及不同語言的部分。我們決定將編譯時的某個部分從JSON
轉換爲必要的C structs
(以及其他系統部分的其他結構)。C中的靜態構造函數
該結構在.h
中定義,聲明將類似於const static struct MCSCommandOptionsMessage mcs_command_message_list[] =
,然後是所需格式的參數列表。
現在的問題是:如果自動生成的結構聲明文件是.h
,還是隻有這個結構有.c
更好?爲什麼?
雙方將是可能的,申報的.h或只有一個.c文件中可以訪問結構。如果結構定義類似於接口和/或您生成幾個結構,如果將它們放在.h文件中會很好。它將定義合同。如果存在多個結構實例,則必須將結構定義放入.h文件中。
如果你想表達隔離並強調該結構是私人事務,那麼你可以在.c文件中定義它。
通常.h文件被用作「包含」文件,並且不是直接編譯的,這是因爲它們中的代碼不應該改變,因爲它們應該定義一個接口。請記住,如果結構中有任何更改並且它們位於.h文件中,那麼您必須重新編譯使用該結構的任何內容。如果結構在.c文件中,那麼每次編譯時都會重新編譯。
此外,如果結構是在.h文件,你可以方便地用它在不同的.c文件
在C中,關鍵字static表示私有。沒有不同的.c文件可以訪問結構。 – harper 2015-04-02 10:49:38
需要包含多少個文件?如果不止一個,你不能在頭文件中聲明這個聲明,因爲至少鏈接器會報錯。 – user1666959 2015-04-02 10:53:01