C語言中#if,#ifdef

來源:互聯網
上載者:User

原址:http://www.chineselinuxuniversity.net/articles/52653.shtml

一般情況下,來源程式中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯。
   
    條件編譯命令最常見的形式為:
   
    #ifdef 標識符
   
    程式段1
   
    #else
   
    程式段2
   
    #endif
   
    它的作用是:當標識符已經被定義過(一般是用#define命令定義),則對程式段1進行編譯,否則編譯器段2.
   
    其中#else部分也可以沒有,即:
   
    #ifdef
   
    程式段1
   
    #denif
   
    還有一種形式,就是#if後面的是一個運算式,而不是一個簡單的標識符:
   
    #if 運算式
   
    程式段1
   
    #else
   
    程式段2
   
    #endif
   
    它的作用是:當指定的運算式值為真(非零)時就編譯器段1,否則編譯器段2.可以事先給定一定條件,使程式在不同的條件下執行不同的功能。
   
    例如:輸入一行字母字元,根據需要設定條件編譯,使之能將字母全改為大寫輸出,或全改為小寫字母輸出。
   
    #define LETTER 1
   
    main()
   
    {
   
    char str[20]="C Language",c;
   
    int i=0;
   
    while((c=str[i])!='\0'){
   
    i++;
   
    #if LETTER
   
    if(c>='a'&&c<='z') c="c-32";
   
    #else
   
    if(c>='A'&&c<='Z') c="c"+32;
   
    #endif
   
    printf("%c",c);
   
    }
   
    }
   
    運行結果為:C LANGUAGE
   
    現在先定義LETTER為1,這樣在預先處理條件編譯命令時,由於LETTER為真(非零),則對第一個if語句進行編譯,運行時使小寫字母變大寫。如果將程式第一行改為:
   
    #define LETTER 0
   
    則在預先處理時,對第二個if語句進行編譯處理,使大寫字母變成小寫字母(大寫字母與相應的小寫字母的ASCII代碼差32)。此時運行情況為:
   
    c language
    
 標頭檔的中的#ifndef,這是一個很關鍵的東西。比如你有兩個C檔案,這兩個C檔案都include了同一個標頭檔。而編譯時間,這兩個C檔案要一同編譯成一個可運行檔案,於是問題來了,大量的聲明衝突。還是把標頭檔的內容都放在#ifndef和#endif中吧。不管你的標頭檔會不會被多個檔案引用,你都要加上這個。一般格式是這樣的: #ifndef <標識>
   
    #define <標識> ……
   
    #endif <標識>在理論上來說可以是自由命名的,但每個標頭檔的這個"標識"都應該是唯一的。標識的命名規則一般是標頭檔名全大寫,前後加底線,並把檔案名稱中的"."也變成底線,如:stdio.h #ifndef _STDIO_H_
   
    #define _STDIO_H_ ……

#endif

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.