如何在c語言中定義函式在 h檔案,和在新檔案中使用

時間 2021-09-05 17:54:44

1樓:匿名使用者

1、開啟或者新建.h檔案;

2、在該檔案中新增你的函式;

3、儲存退出,記住該檔名及其路徑;

4、在新檔案中包含該檔名,如果該檔案不在搜尋路徑下,則包含該檔案的全名

比如:定義一個函式void mydefun(){}除錯無誤後,以檔名aa.h儲存在d:\abc目錄下在新檔案中要用到這個函式,則包含語句中必須有以下一條語句:

#include"d:\\abc\\aa.h"

然後你就可以呼叫mydefun()函式了。

2樓:匿名使用者

建立一個a.h檔案,在其中宣告函式

void enter_string(char str[80]);

在b.c中包括 a.h檔案。

#include "a.h"

當然,這樣的前提條件是a.h,a.c,b.c這三個檔案放在同一個目錄下(各個編譯器可能不太一樣)

也可以把a.c做成lib檔案,也是一樣的

3樓:wo是隻小菜鳥

額,書上都有吧。

一般來說,標頭檔案(.h)都包含了一些常用的而且已經通過了測試證明其執行正確的函式,

在自己的程式中用#include引用這些標頭檔案,直接使用其中一些已經寫好的函式,就省去

了很多麻煩,提高了**的重用性。例如我們常常在程式中寫下 #include 語

句,以使用標頭檔案 stdio.h 中的函式,比如說printf函式。可是該如何寫自己的標頭檔案,

以讓自己的函式能被再次使用呢?

也許有同學會想,真接把自己的函式宣告與定義移到.h檔案裡就可以了。就如下面的做法:

在工程裡建好main.c後,再建一個點utils.h檔案,把常用的函式如mean()放這裡。

// file name : utils.h

// version : 1

doublemean(double, double); //求兩個數的均值

doublemean(double a, double b)

// file name : main.c

// version : 1

#include

#include"utils.h"

intmain()

以上的**是可以編譯通過的,並執行正確的。但是,這樣的**並不完善。如果

再寫一個標頭檔案other.h,而other.h又引用了utils.h的mean()函式,這時就會出

問題:// file name : utils.h

// version : 1

doublemean(double, double); //求兩個數的均值

doublemean(double a, double b)

// file name : other.h

// version : 1

#include"utils.h" //引用 utils.h

doublemean4(double, double, double, double);

doublemean4(double a, double b, double c, double d)

// file name : main.c

// version : 2

// 增加了對other.h的引用

#include

#include"utils.h"

#include"other.h"

intmain()

而此時,編譯就不能通過了,並出現如下的錯誤資訊:

utils.h:9: error: 'mean'is already defined

究其原因就是,函式的宣告可以在程式中寫多次,但函式定義只能有一個。main.c引用了

utils.h檔案,因此main.c裡會有一個mean()函式的宣告,而other.h裡也引用了utils.h

檔案,所以又有一個mean()函式的宣告。

main.c <-- utils.h 第一個mean()

<-- other.h <-- utils.h 第二個mean()

歷史原因,c/c++編譯器不能將這樣相同的重複宣告區別開,所以必須通過其它的方法使得工程

裡,mean()只被宣告一次。一般來說,都是通過#ifndef/#define/#endif巨集命令組合來實現避免

重複宣告的。修改後的**如下:

//file name : utils.h

//version 2

#ifndef utils_h_included // 如果沒有定義識別符號

// utils_h_included,則

// 繼續編譯下面的**,

// 直到 #endif

#define utils_h_included // 定義識別符號 utils_h_included

doublemean(double, double);

doublemean(double a, double b)

#endif// utils_h_included

其它**都同前。#ifndef/#endif 就像 if(!(...)) {} 一樣,讓編譯器明白,如果沒有定義標

識符utils_h_included,就包含下面的**,直到#endif;否則,到#endif為止的**就不被包

含到檔案裡。#define表示定義一個識別符號(不一定要賦值給這個識別符號)。

當main.c引用utils.h時,由於utils_h_included沒被定義,所以#ifndef與#endif之間的**都

會被main.c包含,所以 #define 語句會被執行,定義一個utils_h_included識別符號,同時工程裡

也有了一個mean()函式的定義;當main.c引用other.h時,other.h裡對utils.h的引用並不會再次

定義mean(),因為utils_h_included已經被定義了,通過#ifndef/#endif的控制作用,雖然other.h

引用了utils.h,但引用的標頭檔案並沒有包含mean()的宣告,自然就不會再引起重複定義的錯誤,

編譯就能通過了。

基於相同的道理,所有的.h檔案,都應該加入#ifndef/#define/#endif的組合,以使標頭檔案都能

重複利用而不引起重複定義的錯誤。例子中的other.h檔案也應如此,這裡就留給同學自己新增了。

參考

c語言中函式實現的.c檔案include函式宣告的,h檔案有什麼作用?

4樓:匿名使用者

標頭檔案是給編譯器用的

編譯器在編譯c檔案的時候,需要對其中的函式呼叫做檢查,以便知道函式引數個數、型別、返回值等是否正確。編譯的順序是按照**書寫從前到後進行的,如果你的函式寫在前面,則編譯到呼叫這個函式的語句的時候,由於已經認識了這個函式,所以也沒問題,但是,有時候我們會把函式的實現寫在呼叫語句的後面,這時候就需要在前面書寫個函式的宣告,告訴編譯器我後邊有個某某型別的函式。。如果把大量的宣告寫在 .

c **裡,c檔案也會比較亂,所以用 .h 檔案來儲存這些宣告,.c 檔案要用這些宣告的時候,只需要 #include 即可,如果是系統函式,用 #include ,如果是自定義標頭檔案,則用 #include "***.

h" 。

你的**中 a.c 沒有必要包含 a.h ,因為並沒有呼叫該函式而是該函式的實現,但 main 函式所在的 main.c 用到了 add ,所以必須包含 a.h

5樓:硬虎虎

c語言在演繹的時候,會首先將include的檔案的內容複製到 #include "...h" 這裡(可以這麼理解)。所以上面的主程式其實就是:

#include

int add(int x, int y);

int add(int x, int y)int main()

引入標頭檔案,就是為了**的複用和簡潔的描述。

.h主要用於函式的宣告,.c主要是實現的程式體和主程式。

6樓:澤澤么兒

是一樣的都是為了直接呼叫 int add(int x, int y);

關於c語言標頭檔案的問題:標頭檔案中宣告函式,然後在c檔案中寫函式體?請問這兩個檔案如何一一對應?

7樓:

假如你有一個標頭檔案名為:headfile.h你有一個函式:

int fun(int a, int b) // 這個函式在你的原始檔中

那你就要在原始檔中增加:#include "headfile.h"// 你自己定義的標頭檔案

在標頭檔案headfile.h中需要增加與函式對就的原型:

int fun(int a, int b);// 實際就是把函式定義的那一行復制過來,再加個分號,就實現一一對應了。

8樓:匿名使用者

一般標頭檔案和原始檔的檔名相同,即 key.h 和key.c在key.

c中引用#include "key.h"即可在標頭檔案中叫聲名, void func(); //注意後面的分號原始檔中是函式實現

void func()

c語言 如何在一個檔案中呼叫另一個檔案的函式 用標頭檔案

9樓:匿名使用者

test.h

#include

int func(int x);

func.c

int func(int x)

main.c

#include "test.h"

void main()

把以上三個檔案

du放到一個工程中,zhi編譯,就可以看到dao結果了。

C語言中定義結構體如何在不同的 C檔案中使用

家谷秋魯曠 struct node 這樣就定義了一個結構體型別node,它有兩個int型別的成員,分別是a和b,定義變數是用 struct node st a 這樣的形式.例如,上式就定義了一個名為st a的結構體變數 橙心橙願 比如三個.c檔案一個.h檔案 c 2.c 3.c 4.h這三個標頭檔案...

在c語言中定義的函式有什麼作用,c語言問題,c語言中的函式宣告與定義有什麼好處?

這是 模組化程式設計 的體現,通過函式可以把一個規模較大的較複雜的問題,分解為多個規模較小的簡單的問題。c語言問題,c語言中的函式宣告與定義有什麼好處? 金色潛鳥 通常把能實現某一功能操作或運算的部分抽出來,寫成函式。函式宣告與定義的好處是 主程式 比較簡潔,閱讀性強。特別是在需要多次呼叫的情況下,...

c語言中自定義函式的用法,C語言中,自定義函式的用法。

c語言中,每個函式都有返回值型別。可以是void,int,double,等,也可以是struct型別。在返回值是void型別的函式中,return一般在最後一行,後面不加任何值,而且此時return可以省略。如 void printresult int n 並不是return必須放在最後一行。只要達...