頭檔案

頭檔案

在C語言家族程式中,頭檔案被大量使用。一般而言,每個C++/C程式通常由頭檔案和定義檔案組成。頭檔案作為一種包含功能函式、數據接口聲明的載體檔案,主要用於保存程式的聲明,而定義檔案用於保存程式的實現。

基本介紹

  • 中文名:頭檔案
  • 外文名:header files
  • 套用:含有功能函式
  • 領域:C語言家族
  • 功能:保存程式的聲明
  • 相對概念:定義檔案
概述,組成,示例,用途,分類,傳統 C++,標準 C++,C99 版本,

概述

一般在一個套用開發體系中,功能的真正邏輯實現是以硬體層為基礎,在驅動程式、功能層程式以及用戶的應用程式中完成的。
頭檔案的主要作用在於多個代碼檔案全局變數(函式)的重用、防止定義的衝突,對各個被調用函式給出一個描述,其本身不需要包含程式的邏輯實現代碼,它只起描述性作用,用戶程式只需要按照頭檔案中的接口聲明來調用相關函式或變數,連結器會從庫中尋找相應的實際定義代碼。
從以上結構圖來看,頭檔案是用戶應用程式和函式館之間的橋樑和紐帶。在整個軟體中,頭檔案不是最重要的部分,但它是C語言家族中不可缺少的組成部分。編譯時,編譯器通過頭檔案找到對應的函式館,進而把已引用函式的實際內容導出來代替原有函式。進而在硬體層面實現功能。

組成

C++/C程式的頭檔案以“.h”為後綴。以下是假設名稱為graphics.h的頭檔案:
#ifndef GRAPHICS_H//作用:防止graphics.h被重複引用#define GRAPHICS_H#include<....>//引用標準庫的頭檔案...#include"..."//引用非標準庫的頭檔案...void Function1(...);//全局函式聲明...inline();//inline函式的定義...classBox//作用:類結構聲明{...};#endif
從以上例子可以看出,頭檔案一般由四部分內容組成:
(1)頭檔案開頭處的著作權和版本聲明;
(2)預處理塊;
(3)inline函式的定義;
(4)函式和類結構聲明等。
在頭檔案中,用 ifndef/define/endif結構產生預處理塊,用 #include 格式來引用庫的頭檔案。頭檔案的這種結構,是利用C語言進行開發軟體所通常具備的,屬於公有知識。

示例

conio.h不是C標準庫中的頭檔案,是vc下的一個頭檔案。
conio是Console Input/Output(控制台輸入輸出)的簡寫,其中定義了通過控制台進行數據輸入和數據輸出的函式,主要是一些用戶通過按鍵盤產生的對應操作,比如getch()函式等等。
包含的函式
cgets(char *);
cprintf(const char *, ...);
cputs(const char *);
cscanf(const char *, ...);
inp(unsigned short);
inpw(unsigned short);
getch(void);
getche(void);
kbhit(void);
outp(unsigned short, int);
outpw(unsigned short, unsigned short);
putch(int);
ungetch(int);

用途

什麼樣的內容適合放在頭檔案里?
對於具有外部存儲類型的標識符,可以在其他任何一個源程式檔案中經聲明後引用,因此用戶完全可以將一些具有外部存儲類型的標識符的聲明放在一個頭檔案中。具體地說,頭檔案中可以包括:用戶構造的數據類型(如枚舉類型),外部變數,外部函式、常量和內聯函式等具有一定通用性或常用的量。而一般性的變數和函式定義不宜放在頭檔案中。
例如:#include<stdio.h>中的頭檔案stdio.h作用是讓連結器通過頭檔案里的函式聲明找到函式實際代碼所在的位置即所在的庫檔案,這樣才能使用該函式的實際代碼,函式的實際代碼的實現過程是先讓連結器通過頭檔案里函式的申明找到函式實際代碼所在的位置即所在的庫檔案,再通過#include語句把連結器所找到的函式實際代碼用連結器把函式的實際代碼連結到當前檔案即所要執行的程式中。
當然有些函式的使用不需要提供頭檔案,但是在ISO/ANSI C已經對有些函式的使用必須提供哪些頭檔案制定了標準。

分類

傳統 C++

#include<assert.h>//設定插入點#include<ctype.h>//字元處理#include<errno.h>//定義錯誤碼#include<float.h>//浮點數處理#include<fstream.h>//檔案輸入/輸出#include<iomanip.h>//參數化輸入/輸出#include<iostream.h>//數據流輸入/輸出#include<limits.h>//定義各種數據類型最值常量#include<locale.h>//定義本地化函式#include<math.h>//定義數學函式#include<stdio.h>//定義輸入/輸出函式#include<stdlib.h>//定義雜項函式及記憶體分配函式#include<string.h>//字元串處理#include<strstrea.h>//基於數組的輸入/輸出#include<time.h>//定義關於時間的函式#include<wchar.h>//寬字元處理及輸入/輸出#include<wctype.h>//寬字元分類

標準 C++

#include<algorithm>//STL通用算法#include<bitset>//STL位集容器#include<bits/stdc++.h>//編譯器GCC 4.8支持的萬能頭檔案,基本包含所有頭檔案#include<cctype>//C字元處理#include<cerrno>//C的錯誤報告機制#include<clocale>#include<cmath>//兼容C語言數學庫#include<complex>//複數類#include<cstdio>//C語言輸入輸出工具#include<cstdlib>//C語言通用工具#include<cstring>//C字元串#include<ctime>#include<deque>//STL雙端佇列容器#include<exception>//異常處理類#include<fstream>//檔案輸入輸出流#include<functional>//STL定義運算函式(代替運算符)#include<limits>#include<list>//STL線性列表容器#include<map>//STL映射容器#include<iomanip>#include<ios>//基本輸入/輸出支持#include<iosfwd>//輸入/輸出系統使用的前置聲明#include<iostream>//基本輸入輸出流#include<queue>//STL佇列容器#include<set>//STL集合容器#include<sstream>//基於字元串的流#include<stack>//STL堆疊容器#include<stdexcept>//標準異常類#include<streambuf>//底層輸入/輸出支持#include<string>//字元串類#include<utility>//STL通用模板類#include<vector>//STL動態數組容器#include<cwchar>#include<cwctype>
在C++中,標準庫的命名空間為std,因而包含了上述頭檔案時,一般會使用下列語句:
using namespace std;

C99 版本

#include<complex.h>//複數處理#include<fenv.h>//浮點環境#include<inttypes.h>//整數格式轉換#include<stdbool.h>//布爾環境#include<stdint.h>//整型環境#include<tgmath.h>//通用類型數學宏

相關詞條

熱門詞條

聯絡我們