2. 第二種形式:
#ifndef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
與第一種形式的區(qū)別是將“ifdef”改為“ifndef”。它的功能是,如果標(biāo)識(shí)符未被#define命令定義過(guò)則對(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)然也可以用條件語(yǔ)句來(lái)實(shí)現(xiàn)。 但是用條件語(yǔ)句將會(huì)對(duì)整個(gè)源程序進(jìn)行編譯,生成的目標(biāo)代碼程序很長(zhǎng),而采用條件編譯,則根據(jù)條件只編譯其中的程序段1或程序段2, 生成的目標(biāo)程序較短。如果條件選擇的程序段很長(zhǎng), 采用條件編譯的方法是十分必要的。
本章小結(jié)
1. 預(yù)處理功能是C語(yǔ)言特有的功能,它是在對(duì)源程序正式編譯前由預(yù)處理程序完成的。程序員在程序中用預(yù)處理命令來(lái)調(diào)用這些功能。
2. 宏定義是用一個(gè)標(biāo)識(shí)符來(lái)表示一個(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è)重要功能,它可用來(lái)把多個(gè)源文件連接成一個(gè)源文件進(jìn)行編譯,結(jié)果將生成一個(gè)目標(biāo)文件。
6. 條件編譯允許只編譯源程序中滿(mǎn)足條件的程序段,使生成的目標(biāo)程序較短,從而減少了內(nèi)存的開(kāi)銷(xiāo)并提高了程序的效率。
7. 使用預(yù)處理功能便于程序的修改、閱讀、移植和調(diào)試,也便于實(shí)現(xiàn)模塊化程序設(shè)計(jì)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。