4
、そこにいる間接の2レベル:私はそれを持っているので、我々はMACRO_JOIN1
が必要であることを知っているなぜ本当の貼り付け操作の前にマクロの定義における間接の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
貼り付けもストリングもないので、最初に引数を拡張することができます。
しかし、2番目のインダイレクションの目的は正確にはMACRO_JOIN
ですか?どんな状況でMACRO_JOIN
が動作しますが、MACRO_JOIN1
は失敗しますか?
アメージング説明!私は私のcppの実装でこれらの特別なテストケースを試しなければならない... – chqrlie
私は参照してください。私はその目的が何かを "強制する"ようなものだと考えていましたが、私はこのような用途について考えたことはありませんでした。別の質問:あなたの例では、マクロ 'NOEXPAND()'はほとんど役に立ちません。私たちがそれを利用できる場合はありますか? –
@ PJ.Hades私が言ったように、違いを生むマクロ定義は、とにかくとにかく貧弱なスタイルとみなされます。私が思いつくことができる例は、 'NOEXPAND()'と同じように役に立たないでしょう。実際に使用しているマクロ定義でユースケースを見つけなければ、心配しないでください。 – hvd