そんなこと知ってる:
#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) + 1str(4)で置き換えます<4-value> + 1。4 + 1結果は 4 + 1 + 1