C原始檔要包含自己的標頭檔案

2021-06-28 16:32:03 字數 978 閱讀 3997

我們經常在c工程中發現,原始檔中要包含自己的標頭檔案。一直以來,都不知道為什麼這樣做。現在,我知道了。 

我認為,.c檔案沒有必要包含自己的.h檔案。.h檔案包含.c檔案中定義的函式和全域性變數的宣告,.h檔案就是.c檔案提供的對外介面檔案。既然.h檔案就是.c檔案提供的對外介面檔案,那麼.c檔案就沒必要包含自己的.h檔案了(.h檔案是對外提供用的,對內又何必再包含進來呢)。

鑑於這樣的理解,我對於工程中.c原始檔包含自己的.h標頭檔案很是不理解,不知道為什麼要這樣做。 

但是現在,我知道為什麼要原始檔包含自己的標頭檔案了。 

「如果希望讓編譯器檢查宣告的一致性, 一定要把全域性宣告放到標頭檔案中。特別是, 永遠不要把外部函式的原型(也就是函式宣告)放到.c 檔案中: 通常它與定義的一致性不能得到檢查, 而矛盾的原型(也就是函式宣告)比不用還糟糕。」  注意:外部函式的原型,就是外部函式的宣告。 

這個外部函式a指的是b.c檔案之外定義的函式,b.c檔案中需要使用外部函式a,就需要先對外部函式a宣告(對外部函式的宣告就是外部函式原型)。對這個外部函式a的宣告,不能放在b.c檔案裡面來實現。  

以例項說明:  

① 假若工程中有2個原始檔a.c和b.c;a.c的標頭檔案為a.h,b.c的標頭檔案為b.h。

② a.c中定義了乙個函式sum。 

③ b.c要引用sum 這個函式。做法是:在b.c中宣告sum這個函式。然後b.c就可以使用sum函式了。 

這樣的做法就是把外部函式sum的宣告放到了b.c中來。然而,這樣的做法很不妥。 

不妥的原因:sum是在a.c中定義的,而聲明確是在b.c中,sum函式的定義和宣告不是在同乙個檔案中的。定義和宣告不在同乙個檔案中,編譯的時候,編譯器就不能對定義和宣告的一致性進行檢查。這樣,如果sum的定義和宣告不一致,編譯器就無法檢查出來(定義和宣告不在同乙個檔案中),那麼編譯的時候不會報錯,但是程式執行的時候就可能會出錯。而這樣的錯誤,查詢起來又不是很容易。 

鑑於此,才這樣說:「永遠不要把外部函式的原型放到.c 檔案中」。 

c原始檔中要包含自己的標頭檔案

我們經常在c工程中發現,原始檔中要包含自己的標頭檔案。一直以來,都不知道為什麼這樣做。現在,我知道了。我認為,c檔案沒有必要包含自己的.h檔案。h檔案包含.c檔案中定義的函式和全域性變數的宣告,h檔案就是.c檔案提供的對外介面檔案。既然.h檔案就是.c檔案提供的對外介面檔案,那麼.c檔案就沒必要包含...

c原始檔中要包含自己的標頭檔案

我們經常在c工程中發現,原始檔中要包含自己的標頭檔案。一直以來,都不知道為什麼這樣做。現在,我知道了。我認為,c檔案沒有必要包含自己的.件。件包含.c檔案中定義的函式和全域性變數的宣告,件就是.c檔案提供的對外介面檔案。既然.件就是.c檔案提供的對外介面檔案,那麼.c檔案就沒必要包含自己的.件了 件...

檔案 標頭檔案 原始檔(C )

標頭檔案和原始檔中的函式宣告與定義 函式原型 file fsopen const char filename,const char mode,int shflag file wfsopen const wchar t filename,const wchar t mode,int shflag 注 ...