頭文件通過預處理器標識符(include)而成為我們程序的一部分。預處理器標識符用“#”來標識。這個符號放在程序的最開始 的第一行的位置上。處理這些標識符的程序稱為預處理器(preprocessor),一般綁定在編譯器中。
include 指示符讀入指定文件的內(nèi)容,它有兩種格式:
#include<iostream>
#include"iostream"
如果文件名用"<"和 ">"括起來。那么表示這個文件是一個工程文件或者標準的頭文件。查找過程會檢查預定義的目錄。我們可以通過設置搜索路徑環(huán)境變量或者命令行選項來修改這些目錄。
如果文件是用引號括起來的,就表示這個文件是用戶自己提供的,那么查找這個文件的時候,就可以從當前的目錄開始查找,
被包含的文件可能還會包含#include,一個同文件可能會被同一個原文件多次的包含。條件指示符可以防止這種頭文件被重復包含的情況。
例如:
#ifndef   BOOKSTORE_H
#define BOOKSTORE_H
/*bookstore.h的內(nèi)容*/
#endif
條件指示符#ifndef用于檢查預編譯器常量BOOKSTORE_H是否已經(jīng)被定義了(習慣上我們把與編譯器常量用大寫表示)。如果BOOKSTORE_H沒有在前面定義的話,那么#ifndef 的值為真。那么#ifndef 和#endif中間的語句

將會被執(zhí)行,否則的話,之間的語句就會被忽略。
為了保證頭文件只被處理一次。把如下的的頭文件放在#ifndef的后面。
#define指示符放在#ifndef的后面。這樣頭文件在第一次包含的時候,BOOOKSTORE_H就被定義了,那么以后如果在出現(xiàn)包含頭文件的情況,則 #ifndef的值就為假了。
只要不存在“兩個必須包含的頭文件使用同一個預編譯器常量”這種情況,那么這種機制就會很好的運行。
#ifdef指示符用來判斷一個預定義器常量是否已經(jīng)被定義了,以便有條件的包含程序代碼。

注意:
#ifndef條件指示符和ifdef指示符的區(qū)別。
前者用于防止頭文件被重復包含,而后者則是為了判斷一下一個預定義器常量是否被定義了。


我們在編譯程序的時候,可以使用-D,在——D的后面寫上預處理器常量的名字,這樣就可以在命令行中定義一個與處理器的常量了。
$CC -DBOOKSTORE_H   main.c
也可以用#define指示符來定義一個預處理器的常量。