二級C語言考試輔導(dǎo)教程第九章:預(yù)處理[4]

字號:

2. 第二種形式:
     #ifndef 標(biāo)識符
     程序段1
     #else
     程序段2
     #endif
     與第一種形式的區(qū)別是將“ifdef”改為“ifndef”。它的功能是,如果標(biāo)識符未被#define命令定義過則對程序段1進行編譯, 否則對程序段2進行編譯。這與第一種形式的功能正相反。
     3. 第三種形式:
     #if 常量表達(dá)式
     程序段1
     #else
     程序段2
     #endif
     它的功能是,如常量表達(dá)式的值為真(非0),則對程序段1 進行編譯,否則對程序段2進行編譯。因此可以使程序在不同條件下,完成不同的功能
     #define R 1
     main(){
     float c,r,s;
     printf ("input a number: ");
     scanf("%f",&c);
     #if R
     r=3.14159*c*c;
     printf("area of round is: %f\n",r);
     #else
     s=c*c;
     printf("area of square is: %f\n",s);
     #endif
     }
     本例中采用了第三種形式的條件編譯。在程序第一行宏定義中,定義R為1,因此在條件編譯時,常量表達(dá)式的值為真, 故計算并輸出圓面積。上面介紹的條件編譯當(dāng)然也可以用條件語句來實現(xiàn)。 但是用條件語句將會對整個源程序進行編譯,生成的目標(biāo)代碼程序很長,而采用條件編譯,則根據(jù)條件只編譯其中的程序段1或程序段2, 生成的目標(biāo)程序較短。如果條件選擇的程序段很長, 采用條件編譯的方法是十分必要的。
     本章小結(jié)
     1. 預(yù)處理功能是C語言特有的功能,它是在對源程序正式編譯前由預(yù)處理程序完成的。程序員在程序中用預(yù)處理命令來調(diào)用這些功能。 來源:www.examda.com
     2. 宏定義是用一個標(biāo)識符來表示一個字符串,這個字符串可以是常量、變量或表達(dá)式。在宏調(diào)用中將用該字符串代換宏名。
     3. 宏定義可以帶有參數(shù),宏調(diào)用時是以實參代換形參。而不是“值傳送”。
     4. 為了避免宏代換時發(fā)生錯誤,宏定義中的字符串應(yīng)加括號,字符串中出現(xiàn)的形式參數(shù)兩邊也應(yīng)加括號。
     5. 文件包含是預(yù)處理的一個重要功能,它可用來把多個源文件連接成一個源文件進行編譯,結(jié)果將生成一個目標(biāo)文件。
     6. 條件編譯允許只編譯源程序中滿足條件的程序段,使生成的目標(biāo)程序較短,從而減少了內(nèi)存的開銷并提高了程序的效率。
     7. 使用預(yù)處理功能便于程序的修改、閱讀、移植和調(diào)試,也便于實現(xiàn)模塊化程序設(shè)計。