我知道這個代碼是有效的既在C和C++:宏重定義和C++
#define FOO 0
#define FOO 0
ISO/IEC 14882:2011
16.3宏替換[cpp.replace ]
2當前定義爲類似對象的宏的標識符可能是 由另一個#define預處理指令重新定義,前提是 秒ond定義是一個類似於對象的宏定義,兩個替換列表是相同的,否則該程序是格式不正確的。 同樣,當前被定義爲功能樣宏的標識符可以由另一個#定義預處理指令重新定義,只要第二個定義是具有相同數量和參數拼寫的函數式宏定義,並且兩個替換名單 是相同的,否則該程序是格式不正確的。
但是這個代碼呢?
#define FOO 0
#define FOO FOO
替換列表在預處理開始時(僅在發生第一次替換時)不相同。
這對我來說似乎是一個不好的方法。未來的開發者可能會導致混淆和可能的錯誤。 –
@Jonathan Wood我不想在真實代碼中使用它,只是有趣的時刻 – FrozenHeart