(源自:http://www.cnblogs.com/MichaelOwen/articles/2128733.html)
1.
“#if 0/#if 1 ... #endif”的作用,我們知道,C標准不提供C++里的“//”這樣的單行風格注釋而只提供“/* */”這樣的塊注釋功能,我們通常使用它寫代碼中說明性的注釋文字(注釋作用)以及在調試時關閉某段代碼對編譯器的可見性(屏蔽作用),當然,這里所謂的“注釋作用”和“屏蔽作用”是我們從功能上下的主觀定義,對預處理器而言,兩者並無任何區別。對於前者,因為“注釋”中不會再出現“注釋”和“需要屏蔽的代碼段”,所以不會有嵌套的需求,所以通常不會有問題;而對於后者,當我們在調試程序時需要“屏蔽”某段代碼時,該段代碼中可能包含着前述的“注釋”和/或“已被屏蔽的代碼段”,這時就產生了“/* */”嵌套使用的需求,但C標准恰恰不允許我們這么干。當你試圖使用嵌套的塊注釋功能時,會發現預處理器把最外層注釋的開始和最內層注釋的結尾這兩者之間的內容處理成了注釋,而其后一直到最外層注釋結尾的內容被當作了“有效代碼”——這顯然會引起若干語法錯誤而導致編譯中止。高手們開動腦筋想到了“#if 0 ... #endif”,它同樣由預處理器進行處理,同樣可以“屏蔽”一段代碼,你想把說明文字寫在里面也可以,這些和“/* */”都一樣,但不一樣的是:第一它允許嵌套(層數上限由預處理器決定)、第二你隨時可以把“#if 0”改成“#if 1”來取消對某段代碼的“屏蔽”——很卓越的特性,快拋棄笨拙的“/* */”吧!它唯一的缺點就是在編輯器中沒有“注釋”該有的文本顯示樣式。
2.
1 #if 0 2 3 code 4 5 #endif
(1)code中定義的是一些調試版本的代碼,此時code完全被編譯器忽略。如果想讓code生效,只需把#if 0改成#if 1
(2)#if 0還有一個重要的用途就是用來當成注釋,如果你想要注釋的程序很長,這個時候#if 0是最好的,保證不會犯錯誤。(但是林銳的書上說千萬不要把#if 0 來當作塊注釋使用) #if 1可以讓其間的變量成為局部變量。
(3)這個結構表示你先前寫好的code,現在用不上了,又不想刪除,就用這個方法,比注釋方便。