c
語言的標頭檔案是乙個看似複雜,但是實際上是非常容易懂的乙個部分。之所以大家對於
c語言的標頭檔案
一知半解,我覺得跟現在的各種
c語言入門書籍
都是只對
c語言的語法進行詳細的不能再詳細的說明,但對於整個程式的檔案組織構架卻隻字不提,找了好幾本比較著名的
c語言著作,卻沒有乙個把
.h檔案的用法寫的比較透徹的。下面我就斗膽提筆,來按照我對
.h的認識思路,向大家介紹一下。
讓我們的思緒乘著時間機器回到大學一年級。
c原來老師正在講台上講著我們的第乙個
c語言程式
: hello world!
檔名first.c
main()第1
看看上面的程式,沒有
.h檔案。是的,就是沒有,世界上的萬物都是經歷從沒有到有的過程的,我們對
.h的認識,我想也需要從這個步驟開始。這時確實不需要
.h檔案,因為這個程式太簡單了,根本就不需要。那麼如何才能需要呢?讓我們把這個程式變得稍微複雜些,請看下面這個,
檔名first.c
printstr()
main()第2
還是沒有
,那就讓我們把這個程式再稍微改動一下
.檔名
first.c
main()
printstr()第3
等等,不就是改變了個順序嘛
,但結果確是十分不同的
.讓我們編譯一下例程
-2和例程
-3,你會發現例程
-3是編譯不過的
.這時需要我們來認識一下另乙個c語言
中的概念
:作用域
.我們在這裡只講述與
.h檔案相關的頂層作用域
,頂層作用域就是從宣告點延伸到源程式文字結束,就
printstr()
這個函式來說,他沒有單獨的宣告
,只有定義
,那麼就從他定義的行開始,到
first.c
檔案結束
,也就是說
,在在例程-2的
main()
函式的引用點上
,已經是他的作用域.例程
-3的main()
函式的引用點上,還不是他的作用域
,所以會編譯出錯
.這種情況怎麼辦呢
?有兩種方法
,乙個就是讓我們回到例程
-2,順序對我們來說沒什麼
,誰先誰後不一樣呢,只要能編譯通過
,程式能執行,就讓
main()
檔案總是放到最後吧
.那就讓我們來看另乙個例程
,讓我們看看這個方法是不是在任何時候都會起作用
.檔名
first.c
play2()
play1()
main()第4
也許大部分都會看出來了,這就是經常用到的一種演算法
,函式巢狀
,那麼讓我們看看
, play1
和play2
這兩個函式哪個放到前面呢
?這時就需要我們來使用第二種方法
,使用宣告
.檔名
first.c
play1();
play2();
play2()
play1()
main()
例程-4
經歷了我的半天的嘮叨
,加上四個例程的說明
,我們終於開始了用量變引起的質變
,這篇文章的主題
.h檔案快要出現了。
乙個大型的軟體專案
,可能有幾千個
,上萬個
play,
而不只是
play1,play2
這麼簡單
,這樣就可能有
n個類似
play1(); play2();
這樣的宣告
,這個時候就需要我們想辦法把這樣的
play1(); play2();
也另行管理
,而不是把他放在
.c檔案中,於是
.h檔案出現了
.檔名
first.h
play1();
play2();
檔名first.c
#include
「first.h」
play2()
play1();
main()
檔案 標頭檔案 原始檔(C )
標頭檔案和原始檔中的函式宣告與定義 函式原型 file fsopen const char filename,const char mode,int shflag file wfsopen const wchar t filename,const wchar t mode,int shflag 注 ...
C語言 原始檔 標頭檔案 c cc h 的使用
乙個函式包括定義與宣告,定義中包含了函式是如何實現的,宣告則闡明函式如何被呼叫。工程上為了將個函式模組化,通常將宣告與定義分開,一般將主函式定義放在.c中,其他函式定義放在原始檔.cc中,函式宣告放在.h中。c 中包含主函式,並include所有使用到的標頭檔案 cc中包含其他函式定義,並inclu...
找不到標頭檔案 標頭檔案基礎講解(C語言)
在上linux課的時候被老師提了乙個問題,和 stdio.h 有什麼區別?老實說,當聽到這個問題的時候我心裡想這不是一樣的嗎?學和用了這麼久c語言竟然把這當成理想應當了。其實這些細節也很能體現基礎掌握得怎樣,聽說對於面試來說,大廠也比較傾向問這些基礎內功。和 stdio.h 的區別 當預處理器發現 ...