c語言中“#if 0 / #if 1 ... #endif”的作用(註釋的作用)

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,現在用不上了,又不想刪除,就用這個方法,比註釋方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章