本篇內容主要講解“C語言中include能包含什么文件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言中include能包含什么文件”吧!
成都創新互聯公司長期為1000多家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為遂昌企業提供專業的成都網站建設、成都網站設計,遂昌網站改版等技術服務。擁有十余年豐富建站經驗和眾多成功案例,為您定制開發。
之前我們已經講到過,#include預處理指令使另外一個文件的內容在預處理的時候,先會被復制到當前的.c文件中來,產生一個中間文件,一般情況下,這個中間文件是存儲在編譯器內存里面的,它不會被輸出,但是我們可以使用gcc命令來將這個文件存儲下來,即使用” gcc -E ./helloworld.c > a.out”命令,即可將預處理產生的內容保留出來。如圖1所示。我們在圖1中,僅僅簡單地包含了一個我們自己寫的一個頭文件,這個頭文件里面有一個#define定義的標號MAX,也有一個變量a,當我們包含了這個頭文件并且進行編譯的時候,編譯器便會將頭文件里面的內容在編譯流程的預處理階段把.c源文件中的相關標號定義全部替換掉,如果.h頭文件里面包含了變量的定義,便會將變量的定義原封不動地復制到.c源文件中。以上內容就是文件包含的全部內容。然而#include預處理如果再深究下去,它的內容可不止如此。前面我們也講到過,用#include包含頭文件的時候,根據包含的頭文件到底是庫函數還是用戶自己寫的本地頭文件分別有不同的包含方式。如果用#include包含庫函數,那么其包含的方式為:對于filename不存在任何限制,不過根據約定,標準庫的庫文件以一個.h后綴結尾。編譯器通過查找由編譯器定義的“一系列標準庫路徑”來查找庫函數的頭文件。比如,在典型的UNIX/類UNIX系統上,C編譯器在/user/include/目錄中去查找庫函數的頭文件。這個頭文件如果和所有的源文件放置在一個目錄底下,那么就無需去顯式地指明其路徑。如果不在同一個文件夾下,那么UNIX和BorlandC編譯器都支持一種變體形式,即使用絕對地址的路徑名。如:#include “../src/usart/ usart.h” 再來想一想,C語言中的#include只能支持包含.h后綴的頭文件嗎?其實不然,除了C語言標準庫文件在編寫時是按照約定以.h結尾的,用戶自己定義的頭文件根本就沒有這一條規定。比如圖2所示。在圖2中大家可以看到,我在b.c這個C語言源文件里面包含了一個c.x的頭文件,這個c.x后綴名我自己也不知道是什么意思。但是奇怪的是,編譯器在做預處理的時候,竟然將c.x文件中的內容正常的處理過來了,除了VSCode做代碼靜態解析的時候,有錯誤提示之外,其他貌似什么事情都沒有發生。因此,在一個.c文件里面用#include包含什么后綴的文件,在C語言里面沒有規定。只不過約定俗成,都用.h結尾的文件來當頭文件而已。但是,C語言中源文件的后綴名有明確要求,一定要用.c后綴的文件。接下來,最后一個內容,頭文件里面到底可以用來寫什么內容。這個問題非常玄乎,C語言也沒有規定,隨便你自己去寫。我之前看到過有個哥們(一個半路出家的工程師)將函數全部定義在頭文件中。對于這樣的人才,我除了說他天資聰穎,資質過人,骨骼精奇這樣的褒義詞之外,根本就詞窮了。C語言的頭文件里面的的確確可以用來寫函數,你沒有聽錯,我再寫一遍,的的確確可以用來寫函數。但是,這樣子寫出來的函數很難被多個其它文件包含。這個問題我本來不想展開講解,因為殺傷力太大,我怕將這個反面教材正面化了。但是滿足大家的好奇,還是貼出來了,如圖3所示。到此,相信大家對“C語言中include能包含什么文件”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
網站標題:C語言中include能包含什么文件
分享地址:
http://www.xueling.net.cn/article/jgejjd.html