2010-06-01 52 views
3

我知道這在大多數語言中很常見,也可能在C語言中。 C可以將幾個函數分開處理成一個單獨的文件並將它們包含在內?將一組函數分解爲C中的包含文件?

函數也將依賴於其他包含文件。我希望代碼保留所有功能,但代碼將在幾個C腳本中重複使用,如果一旦我不希望必須通過每個腳本並在其中進行更改,則我將其更改。

回答

1

在頭文件中聲明函數,然後在.c文件中實現它們。現在,您可以將頭文件轉換爲使用函數的任何程序,然後將該程序與從.c文件生成的目標文件鏈接起來。

1

說你有,你想在其他地方使用功能的文件:

int func2(int x){ 
/*do some stuff */ 
return 0; 
} 

你會做什麼是拆分此成一個頭文件和源文件。在頭文件中你只有函數聲明,這告訴編譯器該函數確實存在,即使它在不同的文件中。頭可以被稱爲func2.h可能是這樣的:

#ifndef HEADER_FUNC2_H 
#define HEADER_FUNC2_H 
int func2(int x); 
#endif /*HEADER_FUNC2_H*/ 

的的#ifndef HEADER_FUNC2_H部分是確保讓沒有多重定義正在進行這僅被使用一次。 然後在源文件func2.c你有實際功能的本身:

int func2(int x){ 
/*do some stuff */ 
return 0; 
} 

和現在的任何其他文件,您使用FUNC2你必須包含頭文件。你用#include「func2.h」來做到這一點。因此,例如,如果我們想從randomfile.c它會是這樣叫FUNC2:

#include "func2.h" 
/* rest of randomfile.c */ 
func2(1); 

那麼最後一步是鏈接包含與編譯器的功能在編譯對象文件。

4

絕對是!你所描述的是頭文件。你可以閱讀更多關於這個過程here,但我會概述下面的基礎知識。

你有你的功能分成稱爲functions.h一個頭文件,它包含以下內容:

int return_ten(); 

然後你就可以有一個functions.c文件,其中包含了函數的定義:

int return_ten() 
{ 
    return 10; 
} 

然後在您的main.c文件中,您可以按以下方式包含functions.h

#include <stdio.h> 
#include "functions.h" 

int main(int argc, char *argv[]) 
{ 
    printf("The number you're thinking of is %d\n", return_ten()); 

    return 0; 
} 

這是假設你functions.h文件在同一目錄中main.c文件。

最後,當你想編譯成目標文件中這一點,你需要將它們連接在一起。假設你使用的是命令行編譯器,這只是將額外的定義文件添加到最後。爲了使上述代碼正常工作,您需要在cmd中輸入以下內容:gcc main.c functions.c這會產生一個可以運行的a.out文件。

+0

-1:y您不應將定義放在標題中。如果您多次包含它,則會因符號重新定義而出現錯誤。 – 2010-06-01 13:53:18

+0

謝謝。清理起來了。 – KushalP 2010-06-01 13:57:51

+1

@Bastien:許多圖書館只有標題。 – Lucas 2010-06-01 14:00:53

0

如果您想在多個程序中重用函數,您應該將它們放在一個庫中,並將它與其餘的代碼鏈接起來。

如果你想共享相同的定義(如宏,類型......),你可以將它們放置在頭文件,包括他們#include

請避免將「#include」函數代碼直接放入源文件中,這是一種不好的做法,可能會導致非常有問題的情況(尤其是如果您是初學者,就像您的標記所暗示的那樣)。通常當你有一組功能,你想分享和重用

Consder,您將需要兩個!您通常會得到一個myfuncs.lib(或libmyfuncs.a)庫和一個myfuncs.h標頭。

在你想重用現有功能的程序,你將包括標題和鏈接對庫。

您還可以查看一旦掌握了靜態庫的使用情況,如何使用動態庫。

相關問題