[英]How should I share functions between files in C?
假設我有 3 個文件: code.h
、 code.c
和foo.c
,它們看起來像這樣:
代碼.h:
#ifndef CODE_H_INCLUDED
#define CODE_H_INCLUDED
void C_SomeFunction(void);
#endif
代碼.c:
#include "code.h"
extern void C_DoStuff(void);
void C_SomeFunction(void)
{
// ...
C_DoStuff();
// ...
}
foo.c:
#include "code.h"
void C_DoStuff(void)
{
// ...
}
如果我不想讓code.h
的包含者直接調用C_DoStuff()
,但我仍然想在code.c
中使用它,這是正確的方法嗎? 我沒有在code.c
中將C_DoStuff()
定義為 static 的原因是因為在一個真實的項目中,我有很多這樣的功能,並且將它們全部定義在一個文件中會使文件太大而我不喜歡。
如果我理解正確,您不想“發布” function C_DoStuff()
。 避免這種情況的標准方法是將其聲明為static
。 但是,這意味着 function 的同一實例不能在模塊之間共享。
我認為沒有適合所有情況的解決方案,但如果C_DoStuff()
很小或僅由code.c
使用,則可能包括foo.c
來自code.c
.
因此code.c
看起來像這樣:
#include "code.h"
#include "foo.c" // Implementation of C_DoStuff()
void C_SomeFunction(void)
{
// ...
C_DoStuff();
// ...
}
並且foo.c
看起來像這樣(你可能想要給文件另一個擴展名,例如foo.c.inc
):
#include "code.h" // Only if needed for the contents of C_DoStuff()
static void C_DoStuff(void)
{
// ...
}
缺點是如果另一個模塊也需要C_DoStuff()
,那么該模塊也需要包含foo.c
,因此將創建 function 的第二個副本。 與大多數解決方案一樣,這種模式有其用途和誤用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.