我的預處理器工作原理的心理模型顯然不完整,這使我瘋狂。預處理器令牌擴展
我想連接兩個標記,但第一個標記應該先展開。
#define ANSWER 42
#define FOO foo_ ## ANSWER
這裏,FOO
擴展爲foo_ANSWER
,但我希望它是foo_42
。所以,我在希望,這會在一定程度連接前擴大參數定義MERGE
宏:
#define MERGE(x, y) x ## y
#define BAR MERGE(bar_, ANSWER)
但BAR
還擴展到bar_ANSWER
,而不是bar_42
。所以我定義另一個宏HELPER
:
#define HELPER(x, y) MERGE(x, y)
#define BAZ HELPER(baz_, ANSWER)
現在BAZ
成功地擴展到baz_42
。目前,這對我來說似乎很神奇。
任何人都可以向我解釋這種行爲?擴展規則如何正確工作?
我很抱歉地說,我還提出了同樣問題的可能重複的問題。我想知道爲什麼這種行爲沒有明確記錄。我的意思是預處理器運行的算法。 – 2013-05-16 20:57:22
@sandundhammika:它在規範中有相當清楚的記載 - 第6.10.3節 - 雖然有一些未定義的行爲角落。 – 2015-04-18 19:14:38