C 基本概念 關於標頭檔案的那些事

2021-07-09 20:52:05 字數 2046 閱讀 7600

在c/c++語言中,標頭檔案被大量使用。一般而言,每個c++/c程式通常由標頭檔案(header files)和定義檔案(definition files)組成。標頭檔案作為一種包含功能函式、資料介面宣告的載體檔案,主要用於儲存程式的宣告(declaration),而定義檔案用於儲存程式的實現(implementation).c或者.cpp就是你寫的程式檔案。

一般在乙個應用開發體系中,功能的真正邏輯實現是以硬體層為基礎,在驅動程式、功能層程式以及使用者的應用程式中完成的。標頭檔案的主要作用在於多個**檔案全域性變數(函式)的重用、防止定義的衝突,對各個被呼叫函式給出乙個描述,其本身不需要包含程式的邏輯實現**,它只起描述性作用,使用者程式只需要按照標頭檔案中的介面宣告來呼叫相關函式或變數,鏈結器會從庫中尋找相應的實際定義**。

標頭檔案的組成通常是什麼樣子的呢?我們通過乙個例子就一目了然了。c++/c程式的標頭檔案以「.h」為字尾。以下是假設名稱為graphics.h的標頭檔案:

#ifndef graphics_h//作用:防止graphics.h被重複引用

#define graphics_h;

#include<....>//引用標準庫的標頭檔案

...#include"..."//引用非標準庫的標頭檔案

...void function1(...);//全域性函式宣告

...inline();//inline函式的定義

...classbox//作用:類結構宣告

;#endif

從以上例子可以看出,標頭檔案一般由四部分內容組成:

在標頭檔案中,用ifndef/define/endif結構產生預處理塊,用#include格式來引用庫的標頭檔案。標頭檔案的這種結構,是利用c語言進行開發軟體所通常具備的,屬於公有知識。

預處理的主要任務是確保程式多次包含之後仍然能夠安全工作,例如當預處理看到#include的內容的時候,就用指定標頭檔案的內容代替#include的內容。

c++中還會用到的預處理的功能是標頭檔案保護符,標頭檔案保護符依賴於預處理變數。預處理變數有兩種狀態已定義和未定義。例如前面的例子中,預處理指令#definegraphics_h設定為預處理變數,預處理指令#ifdef當且僅當變數定義時為真,預處理指令#ifndef,當且僅當變數未定義時為真。一旦檢查結果為真,則繼續後面的指令到#ednif結束。

我們通過前面的例子來理解一下,預處理這個概念的含義:第一次遇到graphics.h這個標頭檔案的時候,#ifndef檢查為真,預處理器將順序執行後面的操作直到#endif為止。此時,預處理變數graphics_h變為已定義,對應的標頭檔案的內容也會拷貝到程式中來,這樣當後面再次遇到graphics.h標頭檔案的時候,編譯器將會忽略#ifndef#endif之間的部分。

注意,整個程式中的預處理變數必須唯一,通常的做法是基於標頭檔案中的名字來構建保護符的名字,來確保其唯一性,同時為了避免與程式中變數名衝突預處理變數通常使用大寫的形式。

對於具有外部儲存型別的識別符號,可以在其他任何乙個源程式檔案中經宣告後引用,因此使用者完全可以將一些具有外部儲存型別的識別符號的宣告放在乙個標頭檔案中。具體地說,標頭檔案中可以包括:使用者構造的資料型別(如列舉型別),外部變數,外部函式、constexpr和inline函式等具有一定通用性或常用的量。而一般性的變數和函式定義不宜放在標頭檔案中。

關於檔案上傳的那些事

閱讀本文你將學會 2 客戶端將檔案轉換為base64上傳到伺服器端 大致原理就是將大檔案分割成好幾個部分 根據固定數量 固定大小方式 每個切片都有自己的資料和各自的名字,每一部分都發起一次ajax請求,將切片傳遞到伺服器端。伺服器端根據檔案建立乙個資料夾,用來存放大檔案的切片,當客戶端將全部切片傳遞...

關於雲的基本概念

第一層叫做iaas,有時候也叫做hardware as a service,幾年前如果你想在辦公室或者公司的 上執行一些企業應用,你需要去買伺服器,或者別的高昂的硬體來控制本地應用,讓你的業務執行起來。但是現在有iaas,你可以將硬體外包到別的地方去。iaas公司會提供場外伺服器,儲存和網路硬體,你...

C語言基本概念 檔案(二)

怎麼讀寫檔案 檔案的定位 檔案檢測函式 c程式把檔案分為ascii檔案和二進位制檔案。ascii檔案是文字檔案。在c語言中,檔案是乙個位元組流或二進位製流,也就是說,對於輸入輸出的資料都按 資料流 的形式處理。檔案輸入輸出方式也稱訪問方式,c語言中,檔案有兩種訪問方式 順序訪問和直接訪問 格式fil...