1. 程式人生 > >#if 0 /#if 1作用與用法

#if 0 /#if 1作用與用法

轉自:http://www.cppblog.com/Joe/archive/2011/05/24/147036.aspx

當註釋掉大塊程式碼時,使用"#if 0"比使用"/**/"要好,因為用"/**/"做大段的註釋要防止被註釋掉的程式碼中有巢狀的"/**/",這會導致註釋掉的程式碼區域不是你想要的範圍,當被註釋掉的程式碼很大時容易出現這種情況,特別是過一段時間後又修改該處程式碼時更是如此。

#if 0 / #if 1是支援巢狀的。

  在這裡順便對條件編譯(#ifdef, #else, #endif, #if等)進行說明。以下分3種情況:

一、1. 情況1:
  #ifdef _XXXX
      ...程式段1...
  #else
      ...程式段2...
  #endif
  這表明如果識別符號_XXXX已被#define命令定義過則對程式段1進行編譯;否則對程式段2進行編譯。

  2:情況2:
  #ifndef _XXXX
      ...程式段1...
  #else
      ...程式段2...
  #endif
  這裡使用了#ifndef,表示的是if not def。當然是和#ifdef相反的狀況(如果沒有定義了識別符號_XXXX,那麼執行程式段1,否則執行程式段2)。

  3:情況3:
  #if 常量
      ...程式段1...
      #else
      ...程式段2...
  #endif

這裡表示,如果常量為真(非0,隨便什麼數字,只要不是0),就執行程式段1,否則執行程式段2。

二、 巢狀情況

     1、情況1

#if 常量a

      ...程式段1...
      #else

            #if 常量b
            ...程式段2...
            #else
           ...程式段3...
       #endif

  #endif

這裡表示,如果常量a為真(非0,隨便什麼數字,只要不是0),就執行程式段1。當常量a為0,常量b為真時,執行程式段2;當常量a為0,常量b為0時,執行程式段3;