招生熱線
0755-86191118 0755-86191118
我的位置: 首頁 > 學(xué)習(xí)專區(qū) > .NET技術(shù) > C語言條件編譯詳解

C語言條件編譯詳解

2013-04-17 13:43:01
來源:
[導(dǎo)讀] 它的功能是,如果標(biāo)識符已被 define命令定義過則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。如果沒有程序段2(它為空),本格式中的 else
預(yù)處理程序提供了條件編譯的功能。可以按不同的條件去編譯不同的程序部分,因而產(chǎn)生不同的目標(biāo)代碼文件。這對于程序的移植和調(diào)試是很有用的。條件編譯有三種形式,下面分別介紹:
 
一、第一種形式:
 #ifdef  標(biāo)識符
   程序段1
 #else
   程序段2
 #endif
 

本文來自【C語言中文網(wǎng)】:http://see.xidian.edu.cn/cpp/html/68.html
它的功能是,如果標(biāo)識符已被 #define命令定義過則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。如果沒有程序段2(它為空),本格式中的#else可以沒有,即可以寫為:
    #ifdef  標(biāo)識符
 程序段
     #endif
 
【例9.12】
 #define NUM ok
 main(){
   struct stu
   {
     int num;
     char *name;
     char sex;
     float score;
   }  *ps;
   ps=(struct stu*)malloc(sizeof(struct stu));
   ps->num=102;
   ps->name="Zhang ping";
   ps->sex='M';
   ps->score=62.5;
   #ifdef NUM
   printf("Number=%d\nScore=%f\n",ps->num,ps->score);
   #else
   printf("Name=%s\nSex=%c\n",ps->name,ps->sex);
   #endif
   free(ps);
 }
 
由于在程序的第16行插入了條件編譯預(yù)處理命令,因此要根據(jù)NUM是否被定義過來決定編譯那一個printf語句。而在程序的第一行已對NUM作過宏定義,因此應(yīng)對第一個printf語句作編譯故運(yùn)行結(jié)果是輸出了學(xué)號和成績。
 
在程序的第一行宏定義中,定義NUM表示字符串OK,其實(shí)也可以為任何字符串,甚至不給出任何字符串,寫為:
     #define NUM
 也具有同樣的意義。只有取消程序的第一行才會去編譯第二個printf語句。讀者可上機(jī)試作。
 
二、第二種形式:
     #ifndef 標(biāo)識符 
 程序段1 
     #else 
            程序段2 
     #endif
 與第一種形式的區(qū)別是將“ifdef”改為“ifndef”。它的功能是,如果標(biāo)識符未被#define命令定義過則對程序段1進(jìn)行編譯,否則對程序段2進(jìn)行編譯。這與第一種形式的功能正相反。
 
三、第三種形式:
   #if 常量表達(dá)式
            程序段1
  #else 
            程序段2
         #endif
 它的功能是,如常量表達(dá)式的值為真(非0),則對程序段1 進(jìn)行編譯,否則對程序段2進(jìn)行編譯。因此可以使程序在不同條件下,完成不同的功能。
 
【例9.13】
 #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)然也可以用條件語句來實(shí)現(xiàn)。 但是用條件語句將會對整個源程序進(jìn)行編譯,生成的目標(biāo)代碼程序很長,而采用條件編譯,則根據(jù)條件只編譯其中的程序段1或程序段2,生成的目標(biāo)程序較短。如果條件選擇的程序段很長,采用條件編譯的方法是十分必要的。

深圳北大青鳥嘉華校區(qū)
評論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
综合日韩天天久久一本 | 亚洲欧美日韩在线综合专区 | 综合色区国产亚洲另类 | 日本精品久久久久一区二区三区 | 日韩欧美中文久久精品人人爽 | 在线精品视频A免费不卡 |