一、問題
????????通常,?些程序員都不會去研究頭?件中的內容是什么含義,總覺得亂亂的,有很多 #if、_STDC_、#line 等字符,那么這些字符都各代表什么呢,在頭?件中又起到什么作?呢?
二、解答
????????在頭?件中存在類似于 #if、#undef、#error 等樣式的字符,這些都是 ANSI 標準定義的C語?預處理指令。相關的預處理指令有:
(1)#define:作?是宏定義。
(2)#under:作?是撤銷已定義過的宏名。
(3)#include:作?是使編譯程序將另?源?件嵌?帶有 #include 的源?件中。
(4)#if、#else、#elif 和 #endif:其中,#if 的?般含義是如果 #if 后?的常量表達式為 true,則編譯它與 #endif 之間的代碼,否則跳過這些代碼。命令 #endif 標識?個 #if 塊的結束。#else 命令的功能有點像 C 語?中的 else,當 #if失敗,就進? #else 的另?個選擇。#elif 命令意義與 else if 相同,它形成?個 if else-if 形式的語句,可以進?多種編譯選擇。
(5)#ifdef 和 #ifndef:其中,預處理指令 #ifdef 表示“如果有定義”,? #ifndef 表示“如果?定義”,兩個指令是條件編譯的另?種?法。
(6)#line:它的作?是改變當前?數和?件名稱,它們是在編譯程序中預定義的標識符命令的基本形式,如 #line member[“filename”]。
(7)#error:作?是在編譯程序時,只要遇到 #error 就會?成?個編譯錯誤的提示消息,并停?編譯。
(8)#pragma:該指令是為實現時定義的命令,它允許向編譯程序傳送各種指令。例如,編譯程序可能有?種選擇,它?持對程序執?的跟蹤,可? #pragma 語句指定?個跟蹤選擇。
????????在頭?件中,除了這些預處理指令,還有?些由下劃線組成的字符,它們又起什么作?呢?在 ANSI 標準 C 語?中,還定義了由兩個下劃線和?個標識符組成的宏。例如:
(1)LINE:表?正在編譯的?件的?號。
(2)_FILE:表?正在編譯的?件的名字。
(3)_DATE_:表?編譯時刻的?期字符串,如“12 Dec 2011”。
(4)_TIME:表?編譯時刻的時間字符串,如“15:17:29”。
(5)_STDC_:判浙該?件是不是定義成標準 C 程序。
三、總結
????????若編譯器是?標準的,那么可能僅?持以上宏的?部分,也可能還提供其他的預定義的宏名。