簡體   English   中英

C中的文件之間應該如何共享功能?

[英]How should I share functions between files in C?

假設我有 3 個文件: code.hcode.cfoo.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM