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

字號(hào):

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