c/c++ _c語言模組_標頭檔案_原始檔_標頭檔案搜尋路徑
阿新 • • 發佈:2019-01-23
標頭檔案
- 為什麼會有標頭檔案;
- 怎麼製作標頭檔案;
- 我們的編譯器是怎麼找到標頭檔案;
- 模組:有組織有結構的來給程式碼劃分模組,處理同一個功能程式碼,我們放到一個模組裡面,
.c
檔案
假設我們新增一個數學函式原始檔,並且新增到編輯器
程式碼模組的原則:
- 如果這個函式介面,可以公開給外部使用,那麼就要把這個函式的宣告編寫到標頭檔案
- 如果這個函式介面,不給外部使用,那麼一定不要把這個函式宣告放到標頭檔案
- 注意在編寫標頭檔案的時候為了方便維護,一般使用和模組的.c檔案同名的.h檔案,或有意義的名字
製作標頭檔案
- 怎麼來製作檔案
- 防止重複包含
當我們要使用這個模組的介面的時候;
我們可以包含這個介面標頭檔案;
防止重複包含的格式
- 防止標頭檔案包含的巨集 的格式
- 檔名_H 裡面所有的字母都是大寫的;
能夠節省編譯器編譯程式所需要的時間
標頭檔案搜尋路徑
編譯器是怎麼找到我們的標頭檔案
- 1:
#include ""
是在工程專案裡面來搜尋標頭檔案,./,../; - ./:當前編譯的
.c
所在的資料夾的位置開始搜尋; - 指當前
main.c
檔案當前所在的資料夾位置 - ../:上一層資料夾;
當前資料夾的下一級查搜尋
如果找不到就會到編譯器自帶的標頭檔案目錄下去搜索
如果再找不到回到使用者自定義的標頭檔案搜尋路徑去查詢;
- 2:
#include <>
- 會去編譯器的自帶標頭檔案目錄下去查詢
- 會到使用者自定義的標頭檔案搜尋路徑去查詢
-
什麼情況下使用<>,什麼情況下使用” “
- 1 如果是系統標頭檔案,string.h,stdlib.h等,使用<>
- 2 如果是獨立的第三方模組安裝的 <>比如 mysql.h
- 如果是自己專案的標頭檔案,一定使用” “
- 為什麼不全部使用”“,而還要混合<>來尋找呢??
- 加快編譯器搜尋標頭檔案的速度;
- 方便我們維護,<>我們知道這個程式碼模組是來自第三方,或系統庫,或外部
extern
宣告我們有一個外部模組定義了這個全域性變數
隱藏的問題,vc全域性變數不加型別也能編譯過,當做整數