使用C 預處理器#define 重新定義關鍵字
圍繞C 標準中使用#define 重新定義語言關鍵字的有效性的激烈爭論常引發爭議。本文旨在闡明這個有爭議的問題。
根據 C 標準 (§17.4.3.1.1/2),預處理器巨集不能重新定義在標準函式庫頭中聲明或定義的名稱。此外,它禁止在包含標準標頭的翻譯單元中重新定義詞法上與 C 關鍵字相同的巨集。
但是,在 C 中,規則發生了明顯的變化。 C 0x 草稿 (FCD §17.6.3.3.1) 明確禁止使用 #define 或 #undef 重新定義關鍵字。這項措施似乎符合普遍共識,即使用預處理器操作關鍵字可能會導致不可預測的行為和潛在的標準違規。
儘管如此,值得注意的是「翻譯單元不得#define 或#undef」這一聲明名稱在詞法上與關鍵字相同」此後在最終的C 11 標準中進行了修訂。新措辭( ISO/IEC 14882:2011 §17.6.4.1/4)如下:「翻譯單元不得為與關鍵字詞法相同的名稱定義巨集。 」
此修訂似乎表明徹底禁止使用#define 重新定義關鍵字已從標準中刪除。但是,重新定義標準標頭中聲明或定義的名稱的禁令仍然有效(ISO/IEC 14882:2011 §17.6.4.1/6)。程式中的語言關鍵字。處理器巨集或使用者定義類型)通常被認為是更安全的方法。
以上是可以使用 #define 預處理器重新定義 C 關鍵字嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!