C 和C 中的未定義常數和#if 條件評估
在預處理器邏輯中,宏和常數通常起著至關重要的作用。在處理 #if 條件中未定義的常數時,會出現一種常見情況。在這裡,我們將探討依賴這些未定義常數的可預測行為是否有效。
問題:
開發人員通常假設未定義常數的值為在 #if 評估中使用時為 0。這個假設可靠嗎?還是我們應該期望未定義常量產生未定義的行為?
答案:
是的,您可以依賴這個假設。 C99 標準在§6.10.1 ¶3 中明確規定:
由於巨集擴充和定義的一元運算子執行所有替換後,所有剩餘識別碼都替換為pp-number 0
類似地,C 標準(§16.1 ¶4)規定:
在執行了由於巨集擴展和定義的一元運算子而進行的所有替換後,所有剩餘的識別碼和關鍵字(除了true 和false)替換為pp-number 0
換句話說,在巨集擴充和其他預處理步驟之後,#if 條件中出現的任何未定義的識別碼或常數都會自動替換為值0。此行為在各個版本中都是一致的C 和C .
這種可預測的行為使開發人員可以方便地在#if 條件中使用未定義的常數作為標誌或占位符,而不會帶來未定義的結果或錯誤的風險。當預處理階段之前未定義未定義常數時,編譯器預設將其視為 0。
以上是C 和 C 中的 #if 條件中未定義常數的計算結果是否為 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!