色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

使用C語言中的頭文件有什么技巧和注意事項嗎

江奕云2年前17瀏覽0評論

使用C語言中的頭文件有什么技巧和注意事項嗎?

謝邀。

一般來說,C語言項目中的文件以其后綴名來看,常用的只有兩種:*.c文件和 *. h 文件,后者常被稱作“頭文件”,因為這種類型的文件常常和 #include 關鍵字一起放在 *.c文件的頭部, * . h 中的“h”常被認為是“header(頭)”的縮寫。

大型C語言項目一般都是采用多文件https://www.52fb.cn的開發方式,fun.c模塊里定義了 add() 函數,想在別的模塊里使用 add() 函數,只需要從 fun.c 文件 extern add() 函數即可。

關于 extern 關鍵字的介紹,可參考我的上一個回答。

但是使用 fun.c 模塊的每個文件都需要重新聲明 add() 函數也是很麻煩的。而且,在C語言程序開發中,重復的代碼應該盡量避免。

在C語言程序開發中使用頭文件

為了不重復聲明 fun.c 模塊里定義的函數,有什么辦法呢?答案就是使用頭文件。新建 fun.h 文件,把

fun.c

模塊中能夠提供給外界使用的函數或變量聲明在頭文件里,以后要使用這些函數或者變量,只需要包含頭文件就可以了。請看相關C語言代碼:

如果想在main.c文件中使用fun.c文件中定義的函數,只需要包含fun.h就可以了,下面是一段C語言代碼例子,請看:

事實上,以后任何模塊想調用fun.c中的函數,都只需包含fun.h即可。關于fun.h中內容,有幾點細節需要說明

先說說為什么 #include <stdio.h>用角括號,而#include “fun.h”用引號。對于用尖括號包含的頭文件,C語言編譯器會從系統的頭文件目錄查找,例如我的 codeblocks 的系統頭文件路徑:

對于引號包含的頭文件,C語言編譯器會首先查找包含頭文件的 .c 文件所在目錄,沒有找到再查找系統的頭文件目錄。

因為我們建立的 fun.h 文件和 main.c 在同一目錄,所以在 main.c 文件中包含 fun.h 頭文件要用引號,如果用尖括號包含編譯器就找不到 fun.h 文件了,編譯就會報錯。

避免頭文件的重復包含

下面這幾條C語言代碼屬于條件編譯語句,意思是如果沒有 define __FUN_H__ 就 define __FUN_H__ ,如果之前 define 過,#ifndef 到 #endif 的C語言代碼段就不參與編譯了,這樣可以避免 #ifndef 到 #endif 的代碼段被重復包含。

__FUN_H__ 當然也可以改成其他名字,只需要確保唯一性就可以了。

那為什么需要防止重復包含呢?誰會把一個頭文件包含兩次呢?像上面那么明顯的錯誤沒人會犯,但有時候重復包含的錯誤并不是那么明顯的。

在規模較大的C語言項目中頭文件包含頭文件的情況很常見,經常會包含四五層,這時候重復包含的問題就很難發現了。

比如在我的系統頭文件錄/usr/include中,errno.h包含了bits/errno.h,后者又包含了linux/errno.h,后者又包含了asm/errno.h,后者又包含了asm-generic/errno.h。

另外一個問題是,就算我是重復包含了頭文件,那有什么危害么?像上面的三個函數聲明,在C語言程序中聲明兩次也沒有問題,對于具有External Linkage的函數,聲明任意多次也都代表同一個函數。在C語言項目中重復包含頭文件有以下問題:

一是使預處理的速度變慢了,要處理很多本來不需要處理的頭文件。二是如果有互相包含的情況,預處理器就陷入死循環了(不過現在編譯器都會規定一個包含層數的上限)。三是頭文件里有些C語言代碼不允許重復出現,雖然變量和函數允許多次聲明(只要不是多次定義就行),但頭文件里有些C語言代碼是不允許多次出現的,比如typedef類型定義和結構體Tag定義等,在一個程序文件中只允許出現一次。還有一個問題,為什么不直接包含 .c 文件呢?

我在 main.c 文件里直接 #include “fun.c” 不更方便嗎?當然,這樣的C語言代碼編譯也能通過,可是以后要是又有一個模塊需要用到 fun.c 中定義的函數呢?再包含一次 fun.c ?這樣不就相當于 add() 函數有多處定義了嗎?這樣在程序鏈接階段就會有麻煩,或者根本無法生成可執行程序。如果包含的是頭文件,那無論包含多少次,add() 函數也只有一處定義,鏈接是不會有問題的了。

歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

java的泛型方法調用,使用C語言中的頭文件有什么技巧和注意事項嗎