收到c語言,必然會用到.h檔案,它有什麼樣的作用?
整理各網路資料,如下基本功能描述:
理論概述:
.h中一般放的是同名
.c檔案中定義的變數、陣列、函式的宣告,需要讓
.c外部使用的宣告。
1)h檔案作用:
1. 方便開發
:包含一些檔案需要的共同的常量,結構
,型別定義,函式
,變數申明;
2. 使函式的作用域從函式宣告的位置開始,而不是函式定義的位置
(實踐總結)
3. 提供介面
:對乙個軟體包來說可以提供乙個給外界的介面(例如
: stdio.h)。
2)h檔案裡應該有什麼:常量
,結構,型別定義,函式
,變數申明。
3)h檔案不應該有什麼
:變數定義
,函式定義。
4)extern問題
:1.
對於變數需要
extern;
2. 對於函式不需要因為
函式的預設狀態是
extern的。
如果乙個函式要改變為只在檔案內可見,加
static
。5)include包含問題
:雖然申明和型別定義可以重複
,不過推薦使用條件編譯。
#ifndef _filename_h
#define _filename_h……
#endif
實踐總結
:先看最簡單的程式:hello world
/* test1.c */
main()
注意,test1
中並沒有
.h檔案,編譯可以順利通過。把程式做下改動,下面這個:
/* test2.c */
prtstr()
main()
test2.c
中還是沒有
.h檔案,編譯仍可以順利通過。再把程式改動下:
/* test3.c */
main()
prtstr()
test3.c中仍然沒有
.h檔案,編譯失敗→_
→。難道函式的位置影響編譯的過程?現在我們來熟悉一下c
語言中的概念:作用域。
我們在這裡只講述與.h
檔案相關的頂層作用域
, 頂層作用域就是從宣告點延伸到源程式文字結束, 就
prtstr()
這個函式來說,他沒有單獨的宣告
,只有定義
,那麼就從他定義的行開始
,到檔案結束
, 也就是說,在
test2.c
的main()
函式的引用點上
,已經是他的作用域。
test3.c
的main()
函式的引用點上,還不是他的作用域
,所以會編譯出錯
. 這種情況怎麼辦呢
? 有兩種方法
,乙個就是讓我們回到
test2.c,
順序對我們來說沒什麼
, 誰先誰後不一樣呢,只要能編譯通過
,程式能執行
, 就讓
main()
檔案總是放到最後吧。那就讓我們來看另乙個例程
,讓我們看看這個方法是不是在任何時候都會起作用.
/* test4.c */
play2()
play1()
main()
這就是經常用到的一種演算法,
函式巢狀。
play1
和play2
這兩個函式哪個放到前面呢
?這時就需要我們來使用第二種方法
,使用宣告.
/* test5.c */
play1();
play2();
play2()
play1()
main()
乙個大型的軟體專案,
可能有幾千個
,上萬個
play,
而不只是
play1,play2
這麼簡單
, 這樣就可能有
n 個類似
play1(); play2();
這樣的宣告
, 這個時候就需要我們想辦法把這樣的
play1(); play2();
另行管理
, 而不是把他放在
.c檔案中
, 於是
.h 檔案出現了
.
/* test.h */
play1();
play2();
/* test6.c */
#include 「test.h」
play2()
play1();
main()
上面是.h
檔案的最基本的功能。
c標頭檔案 h 的作用
c語言的著作中,至今還沒發現把 h理論概述 h中一般放的是同名 c檔案中定義的變數 陣列 函式的宣告,需要讓 c外部使用的宣告。1 h檔案作用 1.方便開發 包含一些檔案需要的共同的常量,結構 型別定義,函式 變數申明 2.使函式的作用域從函式宣告的位置開始,而不是函式定義的位置 實踐總結 3 提供...
C 標頭檔案的作用
標頭檔案 每個c c程式通常分為兩個檔案。乙個檔案用於儲存程式的宣告 declaration 稱為標頭檔案。另乙個檔案用於儲存程式的實現 implementation 稱為定義 definition 檔案。c c程式的標頭檔案以 h 為字尾,c程式的定義檔案以 c 為字尾,c 程式的定義檔案通常以 ...
C 標頭檔案的作用
通常,在乙個c 程式中,只包含兩類檔案 cpp檔案和.件。其中,cpp檔案被稱作c 原始檔,裡面放的都是c 的源 而.件則被稱作c 標頭檔案,裡面放的也是c 的源 c 語言支援 分別編譯 separate compilation 乙個程式包含多個.cpp檔案時,這些.cpp檔案可分別編譯成各自的目標...