:C++ FAQ - Miscellaneous technical issues - [39.6] What should be done with macros that need to paste two tokens together?なぜマクロに2層の間接指定が必要なのですか?で
は、誰かが私になぜを説明してもらえますか?私が読んだのはです。私はを信じていますが、誰かがそう言っていたので、何かを信じることはできません。
私はアプローチを試してみましたが、私はどんなバグが表示されて見つけることができません:だから
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
なぜ私は(Webページからの引用)の代わりに、このようにそれを行うために必要な操作を行います。
##を使用する場合、間接指定の二重のレイヤーが必要です。 は、基本的には、このような として「トークン貼り付け」のための特別なマクロを作成する必要があります。この上
#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b
トラスト私を - あなたは本当に これを実行する必要があります! (。。そして、誰もそれが時々 なし間接の第二層を作品と言って私を書きませんしてくださいLINE__ __ でシンボルを連結してみて、次に何が起こるかを参照)
編集:彼は使用していますなぜ誰も説明してもらえNAME2_HIDDEN
が宣言される前に? NAME2_HIDDEN
マクロを使用する前にそれを定義する方が論理的です。ここ何かのトリックですか?
私はあなたに何を聞いているのか分かりません... –
私は少しはっきりしていません。 – Rookie
@tenfour、done。私の編集部分の答えを知っているかもしれませんか? – Rookie