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必須放在最後一行。只要達...