我正在實作一個 C 專案,要在一個更大的 C 專案內部/一起編譯。我有一個大.c檔案(沒有標題),這是我最近添加的。并且這些添加的目的在邏輯上與大 C 檔案是分開的。我想將其拆分為兩個.c檔案,以便更好地維護。但是我面臨一個復雜的問題。
盡管在邏輯上和最好是可分離的,但這些理論上分離的單元(.c檔案)必須共享原始檔案中的一些靜態函式和宣告。當試圖創建一個包含公共依賴項的頭檔案(這是公共程序)時,由于以下原因(以及我嘗試過的),我很掙扎。
- 我的代碼被埋入的更大的專案中,有一些與我的代碼相同的命名定義,這就是為什么它們最初是靜態宣告的原因。它以這種方式作業,但是當我嘗試拆分 c 檔案并創建頭檔案時,我不得不洗掉其中一些中的 static 關鍵字(以免出現錯誤未定義參考),但這導致了多個宣告錯誤,因為與更大的專案發生沖突(意料之中但令人沮喪)。
- 我無法更改此類函式和結構的命名,因為它們對于外部專案來說是嚴格的。
- 如果頭檔案中的宣告是靜態的,但 c 檔案中的定義不是,我對會發生什么感到困惑。無法確定這是否會導致碰撞(理論上應該?)。
- 我不想在分離的檔案中重復靜態公共依賴項,它只涉及復制代碼,與我簡化維護的目的相矛盾。
我猜它歸結為,我可以創建這樣一個或多個頭檔案,鏈接(匯出的符號)僅對匯入該頭檔案的 c 檔案可見,而不是從其他翻譯單元可見。并且要求我創建的這些單元可以看到彼此的定義(因為只包含頭檔案)。
即使我問它,這似乎也不可能,但是我可能從錯誤的角度來處理問題,我也想了解這一點。我想做的事是不可能的,我應該把它保存為一個檔案嗎?
如果有用,我正在為 Nginx Web 服務器開發一個模塊。
uj5u.com熱心網友回復:
這是包含 .c 檔案的少數情況之一。
首先,您有兩個 .c 檔案,例如。模塊 1.c 和模塊 2.c。然后創建第三個名為 mylibrary.c 的檔案,其中僅包含以下內容:
#include "module1.c"
#include "module2.c"
并且只編譯mylibrary.c。雖然這意味著您失去了通過單獨編譯模塊來減少編譯時間的能力,但您仍然可以在不同的 .c 檔案中邏輯分離函式,同時只匯出您想要的函式。
對于需要在子模塊之間共享的靜態函式,為這些函式制作單獨的頭檔案以包含在每個子模塊中。
例如:
模塊1_priv.h:
static void mod1_internal1(void);
void mod1_external1(void);
模塊2_priv.h:
static void mod2_internal1(void);
void mod2_external1(void);
模塊1.c:
#include "module1_priv.h"
#include "module2_priv.h"
static void mod1_internal1(void)
{
// do something
}
void mod1_internal2(void)
{
// do something
}
模塊2.c:
#include "module1_priv.h"
#include "module2_priv.h"
static void mod2_internal1(void)
{
// do something
}
void mod2_internal2(void)
{
// do something
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/518349.html
標籤:Cnginx
上一篇:用于讀取這些命令列引數的偽代碼?
