以“#”號開頭的都是C語言中的預(yù)處理命令。一般都放在源文件的前面,是在對源程序正式編譯前由預(yù)處理程序完成的。
所謂預(yù)處理是指在進(jìn)行編譯的第一遍掃描(詞法掃描和語法分析)之前所作的工作。預(yù)處理是C語言的一個(gè)重要功能, 它由預(yù)處理程序負(fù)責(zé)完成。當(dāng)對一個(gè)源文件進(jìn)行編譯時(shí), 系統(tǒng)將自動(dòng)引用預(yù)處理程序?qū)υ闯绦蛑械念A(yù)處理部分作處理, 處理完畢自動(dòng)進(jìn)入對源程序的編譯。 具體解釋如下: #define:宏定義命令,就是用一個(gè)標(biāo)識符來表示一個(gè)字符串。 例如 #define MAX 100 那么,在代碼中就可以使用標(biāo)識符MAX來代替100這個(gè)具體的值(這個(gè)叫宏代換,宏展開),如果想修改,直接修改定義處的值,而代碼不必改,便于程序的修改。 #include:文件包含命令,一個(gè)C程序可能需要一些函數(shù)原型的聲明文件,或者多人開發(fā)的源程序,包含命令就是將這些文件內(nèi)容引入到本源文件中,形成一個(gè)完整的C項(xiàng)目程序。例如 #include"math.h" 就是將數(shù)學(xué)公式函數(shù)的頭文件包含進(jìn)來,代碼中才能調(diào)用一些數(shù)學(xué)公式。 #ifdef #else #endif #ifndef #undef:這些是相到關(guān)聯(lián)的條件編譯命令??梢园床煌臈l件去編譯不同的程序部分,因而產(chǎn)生不同的目標(biāo)代碼文件。 這對于程序的移植和調(diào)試是很有用的。 例如: ifdef 標(biāo)識符 程序段1 #else 程序段2 #endif 功能是,如果標(biāo)識符已被 #define命令定義過則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。如果沒有程序段2(為空),則#else可以省略。 #ifndef 標(biāo)識符 程序段1 #else 程序段2 #endif 與第一種形式的區(qū)別是將“ifdef”改為“ifndef”。它的功能是,如果標(biāo)識符未被#define命令定義過則對程序段1進(jìn)行編譯, 否則對程序段2進(jìn)行編譯。這與第一種形式的功能正相反。 #line: 改變_LINE_ 與_ F I L E _的內(nèi)容,它們是在編譯程序中預(yù)先定義的標(biāo)識符。命令的基本形式如下: # line number["filename"] 其中的數(shù)字為任何正整數(shù),可選的文件名為任意有效文件標(biāo)識符。行號為源程序中當(dāng)前行號,文件名為源文件的名字。命令#line主要用于調(diào)試及其它特殊應(yīng)用。 例如,下面說明行計(jì)數(shù)從100開始;printf()語句顯示數(shù)102,因?yàn)樗钦Z句#line 100后的第3行。 #line 100 /* 初始化行計(jì)數(shù)器* / main ( ) /* 行號100 */ { /* 行號101 */ printf("%d\n",_line_) ; /* 行號102 */ } |
|