c語言編譯01 預處理 標頭檔案的結構和用途

2021-08-26 09:57:42 字數 1595 閱讀 2714

檔案的結構

c++/c源程式通常分為兩類檔案。一類檔案用於儲存程式的宣告,稱為標頭檔案;另一類檔案用於儲存程式的實現,稱為原始檔(或者定義檔案)。

c++/c程式的標頭檔案以「.h」為字尾,c程式的原始檔以「.c」為字尾,c++程式的原始檔通常以「.cpp」為字尾(也有一些系統以「.cc」或「.cxx」為字尾)。

c++/c編譯器在掃瞄到一條函式呼叫語句時首先應當知道該函式的原型或定義,函式原型一般都放在標頭檔案中,函式定義則放在原始檔中,當原始檔或標頭檔案通過#include指令包含另乙個標頭檔案的時候,編譯預處理器用標頭檔案的內容取代#include偽指令。這就是說,標頭檔案的所有內容最終都會被合併到某乙個或某幾個原始檔中,如此將每乙個包含的標頭檔案遞迴地展開後形成的原始檔就叫編譯單元。

標頭檔案的用途和結構

(1)通過標頭檔案來呼叫庫功能。在很多場合,源**不便(或不准)向使用者公布,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需按照標頭檔案中的介面宣告來呼叫庫函式,而不必關心介面是怎麼實現的。聯結器會從庫中提取相應的**,並和使用者的程式連線生成可執行檔案或者動態連線庫檔案;

(2)標頭檔案能加強型別安全檢查。如果某個介面被實現或被使用時的方式與標頭檔案中的宣告不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程式設計師除錯、改錯的負擔;

(3)標頭檔案可以提高程式的可讀性(清晰性)。

標頭檔案中的元素比較多,其順序(結構)一般應安排如下:

(2)內部包含衛哨開始(#ifndef ***/#define ***)(必須有);

(3)#include其他標頭檔案(如果需要);

(4)外部變數和全域性函式宣告(如果需要);

(5)常量和巨集定義(如果需要);

(6)型別前置宣告和定義(如果需要);

(7)全域性函式原型和內聯函式的定義(如果需要);

(8)內部包含衛哨結束:#endif// ***(必須有);

(9)檔案版本及修訂說明。

上述排列順序並非絕對,也不存在對錯之分,可根據具體情況靈活安排。

如果程式中需要內聯函式,那麼內聯函式的定義應當放在標頭檔案中,因為內聯函式呼叫語句最終被擴充套件開來而不是採用真正的函式呼叫機制。

例子:agentdevcnc.h

#ifndefagentdev_h_

#defineagentdev_h_

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define_log_file"agent_dev_cnc"

typedef struct _chargeitem ;

typedef struct _chargeitem chargeitem;

intstringisdigit(const char *cstring);

#endif

------------

原始檔中使用:#include "agentdevcnc.h"

C語言10 預處理指令,巨集定義,條件編譯,標頭檔案

1.c語言源 的編譯過程 c編譯器把源 編譯成可執行程式可分為以下步驟 1 預處理 處理 中的預處理指令 以 開頭的 gcc e c o i 2 編譯 將源 編譯成彙編 gcc s i o s gcc s c o s 3 彙編 將彙編 編譯成目標檔案 機器碼 gcc c s o o gcc c i ...

C語言編譯預處理

title date br description c語言編譯預處理 2019 11 06 14 35 32 0800 預處理 c語言 c語言預處理是對源 進行初步轉換 碼農有道 c源程式 編譯預處理 編譯 優化程式 匯程式設計序 鏈結程式 可執行檔案其中編譯預處理階段,讀取c源程式,對其中的預處理...

c 學習筆記 標頭檔案預處理

類的定義一般放在標頭檔案中,但因為在乙個給定的原始檔中,乙個類只能被定義一次 如果在多個檔案中定義乙個類,那麼每個檔案中的定義必須是完全相同的 為了避免含有類的定義的標頭檔案被多次包含,造成類被重複定義 常見錯誤就是link 2001 我們可以在類的定義的標頭檔案中使用標頭檔案預處理變數 例如 if...