2014-12-04 64 views
-2

我想把一個c程序分解成兩個不同的文件。我正在使用靜態函數,我想知道這將如何影響我轉換到兩個文件。我希望我的所有功能都在一個文件中,而所有的功能都在另一個文件中。我需要做什麼來使用靜態函數是兩個不同的文件?多個文件中的靜態函數

+1

您是否考慮過不使用靜態函數? – 2014-12-04 01:32:56

+2

靜態函數具有「內部鏈接」 - 它們保留在它們聲明的文件中。您可以在多個文件中定義相同的靜態函數,但更好的解決方案取決於問題的細節。 – Praxeolitic 2014-12-04 01:33:05

+0

似乎沒有人提到過,在將C文件包括到另一個C文件中沒有任何問題。我這樣做是爲了在特定環境下保持靜態功能,同時保持文件大小的可管理性。 (如果你不喜歡這個,那麼這是一個宗教論證,而不是編程問題。) – carveone 2015-07-12 11:26:41

回答

0

C中靜態函數的鏈接只在一個文件中,所以你可以調用不同源文件中的靜態函數。 所以,你可能需要這個

在交流轉換器,其會調用函數吧

int bar(); /*declaration the function type*/ 
void foo(){bar();} /* just call it*/ 
1

靜態

int bar(){return 1;} 

INT b.c指無形的其他文件。請學習基礎知識。

+0

我認爲這就是我在做的事 – user124249 2014-12-04 06:11:02

+0

C中的靜態函數和C++中的靜態成員函數之間有很大的區別。在C中,一個靜態函數在其翻譯單元之外是不可見的,這是它被編譯到的目標文件。換句話說,製作一個靜態函數限制了它的範圍。你可以將一個靜態函數想象爲對它的* .c文件「私有」(儘管這不是嚴格正確的)。 – user124249 2014-12-04 06:19:15

+0

在C++中,「static」適用於類的成員函數和數據成員。靜態數據成員也稱爲「類變量」,而非靜態數據成員是「實例變量」。這是Smalltalk術語。這意味着只有一個靜態數據成員的副本由一個類的所有對象共享,而每個對象都有自己的非靜態數據成員副本。所以一個靜態數據成員本質上是一個全局變量,它是一個類的成員。 – user124249 2014-12-04 06:19:35

0

最健壯的解決方案是首先在頭文件中聲明'全局可見'函數,然後將此頭文件包含在定義或引用該函數的所有函數中。


app.h:

#ifndef _APP_H //why this? left as an excercise for the reader ;-) 
#define _APP_H 
... 
//declare fun() 
extern int fun(char * strArg); 
... 
#endif 

def.c:

#include "app.h" 
//define fun() 
int fun(char * strArg) 
{ 
    .... 
} 

ref.c:

#include "app.h" 
.... 
//reference fun() 
int ret = fun("this is a test"); 
.... 

==========

通過這種方式,您可以確保對fun()的所有引用正確調用它。 如果您碰巧以任何方式更改fun(),或者錯誤地調用它, 編譯器會告訴您需要完成所有更改/修復的位置。

在任何情況下,如果您想要在特定源文件之外顯示任何內容,最好不要使用「靜態」屬性。 ,因爲靜態屬性的目的是使任何靜態不可見的源文件外部。

========