#ifdef 與#define 意義與 作用

來源:互聯網
上載者:User

   最近在看mysql源碼,其中c/c++ 文法都忘得光光了,複習一下基本的文法結構,便於看懂源碼。當然對於,經常用c/c++的來說,

這些文法是非常簡單了。

 定義: #ifndef x //if not define的簡寫 

          #define x   ...  #endif

作用:

      在c語言中,對同一個變數或者函數進行多次聲明是不會報錯的。所以如果h檔案裡只是進行了聲明工作,即使不使用# ifndef宏定義,

一個c檔案多次包含同一個h檔案也不會報錯。但是在c++語言中,#ifndef的範圍只是在單個檔案中。所以如果h檔案裡定義了全域變數,

即使採用#ifndef宏定義,一個c檔案包含同一個h檔案多次還是會出現全域變數重定義的錯誤。使用#ifndef可以避免下面這種錯誤:如果

在h檔案中定義了全域變數,一個c檔案包含同一個h檔案多次,如果不加#ifndef宏定義,會出現變數重複定義的錯誤;

如果加了#ifndef,則不會出現這種錯誤。

條件編譯的三種形式:

   “ 條件編譯”命令允許對程式中的內容選擇性地編譯,即可以根據一定的條件選擇是否編譯。  

 條件編譯的命令主要有以下幾種 : 

形式1   #ifndef 標識符  

                      程式段 I   

                 #else   

                  程式段 2  

            #endif  

它的作用是當 “ 標識符”已經由# d e f i n e定義過了。則編譯“ 程式段 2 ” 。 否則編譯“ 程式段 1 ” 。其中如果不需要編譯“ 程式段 2 ”。則上述

形式可以變換 為:  

    #ifdef 標識符   

          程式段 1   

            #endif   

形式2  #ifndef 標識符  

                 # define 標識符  

                 程式段 1   

                #else   

                程式段 2   

               #endif  

它的作用是當 “ 標識符 沒有由# d e f i n e定義過。 則編譯“程式段 1”。否則編譯“程式段 2” 。同樣當無“ 程式段2 ”時。則上述形式變換為:  

 # ifndef 標識符  

   # define 標識符  

   程式段 1  

    #endif  

形式3   #if 運算式   

                   程式段 1   

                   #else   

                  程式段 2   

                #endif   

它的作用是 當“運算式”值為真時。編譯器段1。否則則編譯器段 2。同樣 當無程式段 2時,則上述形式變換 為 :  

          #if 運算式   

                 程式段 1  

                #endif  

以上三種形式的條件編譯預先處理,結構都可以嵌套使用。 當# e l s e後嵌套 # i f 時,可以使用預先處理命令 # e l i f , 它相 當於 # e l s e# i f 。

在程式中使用條件編譯主要是為了方便程式的調試和移植。


參考:http://baike.baidu.com/view/1617265.htm#3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.