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
[cpp]view plain
copy 1
/*test1.c*/
2 main()
3
注意,test1
中並沒有
.h檔案,編譯可以順利通過。把程式做下改動,下面這個:
[cpp]view plain
copy 1
/*test2.c*/
2 prtstr()
3
6 main()
7
test2.c中還是沒有
.h檔案,編譯仍可以順利通過。再把程式改動下:
[cpp]view plain
copy 1
/*test3.c*/
2 main()
3
6
7 prtstr()
8
test3.c中仍然沒有
.h檔案,編譯失敗→_
→。難道函式的位置影響編譯的過程?現在我們來熟悉一下c
語言中的概念:作用域。
我們在這裡只講述與.h
檔案相關的頂層作用域
, 頂層作用域就是從宣告點延伸到源程式文字結束, 就
prtstr()
這個函式來說,他沒有單獨的宣告
,只有定義
,那麼就從他定義的行開始
,到檔案結束
, 也就是說,在
test2.c
的main()
函式的引用點上
,已經是他的作用域。
test3.c
的main()
函式的引用點上,還不是他的作用域
,所以會編譯出錯
. 這種情況怎麼辦呢
? 有兩種方法
,乙個就是讓我們回到
test2.c,
順序對我們來說沒什麼
, 誰先誰後不一樣呢,只要能編譯通過
,程式能執行
, 就讓
main()
檔案總是放到最後吧。那就讓我們來看另乙個例程
,讓我們看看這個方法是不是在任何時候都會起作用
.[cpp]view plain
copy
/*test4.c*/
2 play2()
3
6
7 play1()
8
11
12 main()
13
這就是經常用到的一種演算法,
函式巢狀。
play1
和play2
這兩個函式哪個放到前面呢
?這時就需要我們來使用第二種方法
,使用宣告
.[cpp]view plain
copy 1
/*test5.c*/
2 play1();
3 play2();
4
5 play2()
6
9 play1()
10
13 main()
14
乙個大型的軟體專案,
可能有幾千個
,上萬個
play,
而不只是
play1,play2
這麼簡單
, 這樣就可能有
n 個類似
play1(); play2();
這樣的宣告
, 這個時候就需要我們想辦法把這樣的
play1(); play2();
另行管理
, 而不是把他放在
.c檔案中
, 於是
.h 檔案出現了
.[cpp]view plain
copy 1
/*test.h */
2 play1();
3 play2();
4 /* test6.c */
5 #include 「test.h」
6 play2()
7
10 play1();
11
14 main()
15
C 標頭檔案 h的作用
收到c語言,必然會用到.h檔案,它有什麼樣的作用?整理各網路資料,如下基本功能描述 理論概述 h中一般放的是同名 c檔案中定義的變數 陣列 函式的宣告,需要讓 c外部使用的宣告。1 h檔案作用 1.方便開發 包含一些檔案需要的共同的常量,結構 型別定義,函式 變數申明 2.使函式的作用域從函式宣告的...
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檔案可分別編譯成各自的目標...