共找到2條詞條名為頭文件的結果 展開
  • 包含功能函數、數據介面聲明的載體文件
  • stdio.h

頭文件

包含功能函數、數據介面聲明的載體文件

頭文件在計算機C語言家族程序中被大量使用,主要作用在於多個代碼文件全局變數的重用、防止定義的衝突,對各個被調用函數給出一個描述,其本身不需要包含程序的邏輯實現代碼,它只起描述性作用,用戶程序只需要按照頭文件中的介面聲明來調用相關函數或變數,鏈接器會從庫中尋找相應的實際定義代碼。

一般而言,每個C++/C程序通常由頭文件和定義文件組成。頭文件作為一種包含功能函數、數據介面聲明的載體文件,主要用於保存程序的聲明,而定義文件用於保存程序的實現。

概述


一般在一個應用開發體系中,功能的真正邏輯實現是以硬體層為基礎,在驅動程序、功能層程序以及用戶的應用程序中完成的。
從以上結構圖來看,頭文件是用戶應用程序和函數庫之間的橋樑和紐帶。在整個軟體中,頭文件不是最重要的部分,但它是C語言家族中不可缺少的組成部分。編譯時,編譯器通過頭文件找到對應的函數庫,進而把已引用函數的實際內容導出來代替原有函數。進而在硬體層面實現功能。

組成


C++/C程序的頭文件以“.h”為後綴。以下是假設名稱為graphics.h的頭文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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作用是讓鏈接器通過頭文件里的函數聲明找到函數實際代碼所在的位置,即所在的庫文件,這樣才能使用該函數的實際代碼,函數的實際代碼的實現過程是先讓鏈接器通過頭文件里函數的申明找到函數實際代碼所在的位置即所在的庫文件,再通過#include語句把鏈接器所找到的函數實際代碼用鏈接器把函數的實際代碼鏈接到當前文件即所要執行的程序中。
當然有些函數的使用不需要提供頭文件,但是在ISO/ANSI C已經對有些函數的使用必須提供哪些頭文件制定了標準。

分類


傳統C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include//設定插入點
#include//字元處理
#include//定義錯誤碼
#include//浮點數處理
#include//文件輸入/輸出
#include//參數化輸入/輸出
#include//數據流輸入/輸出
#include//定義各種數據類型最值常量
#include//定義本地化函數
#include//定義數學函數
#include//定義輸入/輸出函數
#include//定義雜項函數及內存分配函數
#include//字元串處理
#include//基於數組的輸入/輸出
#include//定義關於時間的函數
#include//寬字元處理及輸入/輸出
#include//寬字元分類
標準C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include//STL通用演演算法
#include//STL位集容器
#include//C字元處理
#include//C的錯誤報告機制
#include
#include//兼容C語言數學庫
#include//複數類
#includestdio>//C語言輸入輸出工具
#include//C語言通用工具
#include//C字元串
#include
#include//STL雙端隊列容器
#include//異常處理類
#include//文件輸入輸出流
#include//STL定義運算函數(代替運算符)
#include
#include//STL線性列表容器
#include//STL映射容器
#include
#include//基本輸入/輸出支持
#include//輸入/輸出系統使用的前置聲明
#include//基本輸入輸出流
#include//STL隊列容器
#include//STL集合容器
#include//基於字元串的流
#include//STL堆棧容器
#include//標準異常類
#include//底層輸入/輸出支持
#include//字元串類
#include//STL通用模板類
#include //STL動態數組容器
#include
#include
在C++中,標準庫的命名空間為std,因而包含了上述頭文件時,一般會使用下列語句:
1usingnamespacestd;

C99版本

1
2
3
4
5
6
#include//複數處理
#include//浮點環境
#include//整數格式轉換
#include//布爾環境
#include//整型環境
#include//通用類型數學宏