今天我們來聊聊c語言中的標頭檔案。
c語言程式**副檔名只能是.c或者.h,換句話說,c語言程式**只能在擴充套件名為.c或者.h的檔案中編寫。我們把.**件稱為標頭檔案。標頭檔案可以在.c檔案中引用,也可以在.**件中引用。
標頭檔案是做什麼用的呢?我們來看一段程式**。
左邊是源**,右邊是執行結果。這段**的功能是列印出字串「hello, world!」。
我們能看到,源**檔案第一行是"#include ",也就是引用了標頭檔案stdio.h。現在我們把這一行去掉,再執行一下看看結果。
注:c語言中行前加雙斜線「//」代表注釋掉這一行,也就是去掉這一行**。
這時我們發現執行後右邊的結果欄出現了報錯,為什麼呢?這是因為列印語句是printf函式輸出的,而printf函式是在標頭檔案stdio.h中宣告的,把引用stdio.h這一行去掉,**在編譯時就找不到printf這個函式,所以就報錯了。
有的朋友問,我們不引用標頭檔案,把printf函式放在.c檔案裡可以嗎?當然可以。但是printf屬於通用函式,幾乎每個.c檔案都會用到,像這樣使用頻率極高的函式有很多,甚至有幾百個,乙個專案裡的.c檔案也有很多,每個.c檔案裡放幾百個函式宣告,是不是很難看?況且我們只想直接呼叫這些函式,根本不關心這些函式長什麼樣子,又何必把它羅列在我們的.c檔案中?
c語言為我們實現了許多通用的函式,比如拷貝函式、比較函式等等,放在乙個通用的函式庫中供我們直接使用,而這些函式的宣告就放在一些標準的標頭檔案中,stdio.h就是標準標頭檔案之一,我們只要引用這些標頭檔案,就可以直接呼叫標頭檔案中宣告的函式,而無需自己去實現這些函式了。當然,除了可以引用標準標頭檔案,我們也可以根據實際需求,自己建立和編寫標頭檔案。
那麼標頭檔案的內容只能是函式宣告嗎?當然不是。除了函式宣告,變數定義、結構定義、巨集定義都可以放在標頭檔案中,如果你覺得你寫的某個函式使用率很高,也可以把它放在標頭檔案中。總而言之,通用的東西都可以放在標頭檔案中。
標頭檔案的引用可以寫成「#include ",也可以寫成"#include "stdio.h" ", 像下圖一樣。
標頭檔案用尖括號括起來和用引號括起來意義是不同的,前者意思是讓編譯器直接去c函式庫裡或者使用者配置的路徑去查詢,而不會在當前目錄去查詢。後者意思是讓編譯器先在當前目錄去找,如果當前目錄找不到,再去c函式庫裡或者使用者配置的路徑去查詢。這裡所說的當前目錄,大家可以理解為引用標頭檔案的檔案所在的目錄。
好了,今天就跟大家分享到這裡。
找不到標頭檔案 標頭檔案基礎講解(C語言)
在上linux課的時候被老師提了乙個問題,和 stdio.h 有什麼區別?老實說,當聽到這個問題的時候我心裡想這不是一樣的嗎?學和用了這麼久c語言竟然把這當成理想應當了。其實這些細節也很能體現基礎掌握得怎樣,聽說對於面試來說,大廠也比較傾向問這些基礎內功。和 stdio.h 的區別 當預處理器發現 ...
Linux 編譯找不到標頭檔案
linux下使用gcc編譯找不到標頭檔案,但是檢視 系統標頭檔案件存放目錄 usr local include 發現標頭檔案確實存在,這是為什麼呢?這是因為linux下的預設標頭檔案路徑 不包含 usr local include,預設包含的是 usr include usr local 是用來存放...
找不到標頭檔案 標頭檔案 你真的懂我嗎?
在上linux課的時候被老師提了乙個問題,和 stdio.h 有什麼區別?老實說,當聽到這個問題的時候我心裡想這不是一樣的嗎?學和用了這麼久c語言竟然把這當成理想應當了。其實這些細節也很能體現基礎掌握得怎樣,聽說對於面試來說,大廠也比較傾向問這些基礎內功。當預處理器發現 include指令時,會檢視...