そんなこと知ってる:
#define foo 4
#define str(s) #s
with str(foo)
writes out: "foo"
、 stringify はテキスト展開の最初に実行されるためですが、これは:
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
withxstr(foo)
書き込み: "4"
.
なんで?プロセスに含まれる手順は何ですか?
そんなこと知ってる:
#define foo 4
#define str(s) #s
with str(foo)
writes out: "foo"
、 stringify はテキスト展開の最初に実行されるためですが、これは:
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
withxstr(foo)
書き込み: "4"
.
なんで?プロセスに含まれる手順は何ですか?
str(foo)
:str(foo)
で#foo
置き換えます。"foo"
xstr(foo)
:xstr(foo)
でstr(<foo-value>)
置き換えます。str(4)
str(4)
:str(4)
で#4
置き換えます。"4"
プリプロセッサは、評価するものがなくなるまで、マクロ変数を展開するマクロ関数を評価します。
あなたが定義する場合
#define xstr(s) str(s) + 1
#define str(s) s + 1
次のコードで
#define foo 4
int main()
{
std::cout << str(foo) << '\n'
<< xstr(foo) << '\n' ;
}
それは次のように評価されます
str(foo)
で置き換えます<foo-value> + 1
。4 + 1
結果は 4 + 1
xstr(foo)
で置き換えますstr(<foo-value>) + 1
。str(4) + 1
str(4)
で置き換えます<4-value> + 1
。4 + 1
結果は 4 + 1 + 1