4
在下面的宏定義,也就是2個間接的實際粘貼操作之前:爲什麼2個間接的宏定義##操作
#define MACRO_JOIN(a, b) MACRO_JOIN1(a, b)
#define MACRO_JOIN1(a, b) MACRO_JOIN2(a, b)
#define MACRO_JOIN2(a, b) a##b
我知道,我們需要MACRO_JOIN1
因爲它有沒有粘貼或串列化,以便可以首先擴展它的參數。
但究竟是第二個間接MACRO_JOIN
的目的是什麼? MACRO_JOIN
會在什麼情況下工作,但MACRO_JOIN1
會失敗?
驚人的解釋!我必須在我的cpp實現上嘗試這些特殊的測試用例... – chqrlie
我明白了。我認爲它的目的就像是「強迫」某些東西,但我從未想過這種用途。另一個問題:在你的例子中,宏NOEXPAND()幾乎是無用的。有什麼情況可以使用它嗎? –
@ PJ.Hades就像我說過的那樣,任何宏觀定義在哪裏都有所影響,無論如何都被認爲是糟糕的風格。任何我能想到的例子都和'NOEXPAND()'一樣無用。所以我會說不要擔心它,除非你碰巧用你正在使用的宏定義找到它的用例。 – hvd