C 中 include的工作原理

2021-09-08 18:26:10 字數 1556 閱讀 2253

大多數人可能對「#include」比較熟悉,因為我們寫c/c++程式的時候都會寫的字串之一,但是它是具體怎麼工作的?或者它的原理是什麼呢?

可能不太熟悉,也有可能沒有去關心過。我們只關心程式能否正確執行,或者程式怎麼實現等等一些問題。 

這裡筆者就為介紹下我們熟悉又不太熟悉的「#include」,首先我們了解下c/c++標頭檔案。

標頭檔案為相關宣告提供了乙個集中存在的位置。標頭檔案一般包含類的定義,extern變數宣告與函式宣告。注意這裡宣告與定義的區別:它們最本質的區別是定義只可以出現一次,宣告可以出現多次。宣告不分配空間,而定義是要分配空間的。標頭檔案正確使用可以保證所有檔案使用給定實體的同一宣告;當宣告需要修改時,只有標頭檔案需要更新。

標頭檔案還可以定義:在編譯的時候就已知道其值的cosnt物件和inline 函式。在標頭檔案中定義上述實體,是因為編譯器需要它們的定義來產生**。例如:為了產生能定義或使用類的物件**,編譯器需要知道組成該型別的資料成員,也需要知道對應的函式。

在c++中,有些地方需要放置常量表示式。例如:列舉成員的初始化必須是常量表示式。常量表示式是編譯器在編譯時就能夠在計算出結果的表示式。當const整型變數通過常量表示式自我初始化時,這個const整型變數就可能是常量表示式。而const變數要成為常量表示式,初始化必須為編譯器可見。為了能夠讓多個檔案使用相同的常量值,const變數和它的初始化必須是每個檔案都可見的。所以將其定義放到標頭檔案中,無論const常量何時使用,編譯器都能知道其初始化。

#include是怎麼樣工作的?

#include設施是c++預處理器的一部分。

預處理器處理程式的源**,是在編譯器之前執行。

#include只接受乙個引數:頭檔名。

預處理器用指定的標頭檔案的內容替代每個include。

我們自己的標頭檔案儲存在檔案中。系統的標頭檔案可能用特定於編譯器的更高效的格式儲存。

標頭檔案經常#include其他標頭檔案。標頭檔案定義的實體經常使用在其他檔案的設施。所以設計的標頭檔案時,應使其可以多次包含在同一原始檔中。我們必須保證包含同一標頭檔案不會引起該標頭檔案定義的類和物件被多次定義。使得標頭檔案安全的通過做法,使用預處理器定義標頭檔案保護符。

什麼是標頭檔案保護符?

看看下面內容大家就會明白了

在編寫標頭檔案之前,我們需要引入一些額外的預處理器設施。預處理器允許我們自定義變數。為了避免名字衝突,預處理器變數經常用全大寫字母表示。預處理變數有兩種狀態:已定義或未定義。

**如下:

#ifndef begein_h

#define begein_h

//定義一些類或者定義函式

#endif

如果沒有兩個標頭檔案定義和使用相同的預處理器變數,那麼就沒有問題。如果出現上述情況,可以用定義在標頭檔案裡實體類來命名預處理器變數來避免預處理變數重名問題。

#include <>與#include " "區別

如果頭檔名在<>中,就會被認為是標準標頭檔案。編譯器會在預定義的位置查詢該標頭檔案,如果是""就認為它是非系統標頭檔案,非系統檔案查詢通常開始於原始檔所在路徑。 

C 中 include的問題

f0305.cpp 定義控制台應用程式的入口點。string長度可伸縮,比字元陣列靈活 通過字元指標操作字串,容易出錯。但string效能略遜於字元指標。include stdafx.h include iostream include include string 這是c 裡面的標頭檔案與c語言中...

C 中的 標頭檔案」 include「

algorithm意為 演算法 是c 的標準模版庫 stl 中最重要的標頭檔案之一,提供了大量基於 迭代器的非成員模版函式 非修改性序列操作 12個 for each 迴圈 對序列中的每個元素執行某操作 find 查詢 在序列中找出某個值的第一次出現的位置 利用底層元素的等於操作符,對範圍內的元素與...

C 中 include標頭檔案

fstream是c stl中對檔案操作的合集,包含了常用的所有檔案操作。在c 中,所有的檔案操作,都是以流 stream 的方式進行的,fstream也就是檔案流file stream。1 插入器 向流輸出資料。比如說開啟了乙個檔案流fout,那麼呼叫fout write to file 2 析取器...