1. 程式人生 > >C語言標頭檔案

C語言標頭檔案

標頭檔案結構

 標頭檔案一般由3部分組成

1.標頭檔案的開頭版本和版權的宣告

2.預處理塊

3.函式和類結構的宣告

 Question1:#include<a.h>和#include“a.h”有什麼區別?

       #include<a.h>引用的是標準庫的標頭檔案,也就是說編譯器是從標準庫進行開始搜尋,而#include”a.h”則是屬於非標準庫的標頭檔案,簡單的說就是使用者自己建立的標頭檔案,以此格式進行包含,編譯器就會直接從使用者的工作目錄開始搜素;對二者進行明確的區分,從而提升編譯的效率!

 Question2:ifndef/define/endif如何起到防止檔案被重複引用的?

       預編譯的概念:預編譯是指對源程式進行編譯之前,先對原始碼中的編譯預處理命令進行處理,然後再將處理的結果和源程式一起進行編譯,得到目的碼。

       標頭檔案中一般放入的是函式的宣告、變數的宣告、結構體等等,一個函式的宣告可以有多個,但是定義只能有一個(什麼是函式的定義,大白話說就是構成你的函式的那個整體程式碼),定義若是有多個就會導致編譯不通過。

       重複引用的意思是指,在一個.c(.cpp)檔案中一個頭檔案被引用了多次,舉一個簡單的例子:現在有三個檔案,a.h,b.c,c.h,其中a.h中包含c.h,而b.c檔案在呼叫的時候同時包含a.h,c.h,這樣就導致了檔案的重複包含,同樣的在一些小的工程專案中,檔案的重複包含是沒有什麼影響的,但是在工業級的專案中是不允許這種低階錯誤發生的。

       Ifndef,define,endif,起的作用,從單詞的字面意思是指如果沒有定義某一個頭檔案,對該標頭檔案進行定義,然後是結束。就拿剛剛a.h,b.c,c.h來書,編譯器在對b.c進行預編譯的時候,對a.h,c.h進行預編譯,預編譯過後,發現在a.h中已經包含了c.h,這樣的話編譯器在處理c.h的時候,就會告訴它,我已經存在啦,不用在包含進來啦。通過這個方式可以實現檔案的重複引用,提升編譯的效率。

 #ifndef _A_H

#define _A_H 

//引用標頭檔案

#include <stdio.h>

#include <math.h>

#include "c.h"

......

// 函式宣告

void Function1(...)

void Function2(...)

void Function2(...)

......

// 其它的的定義

.....

 #endif