7

このコードの出力の背後にある理由を知りたいです。答えが思いつきませんでした。

#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
void main()
{
   printf("%s %s",h(f(1,2)),g(f(1,2)));
}

PS:出力は12 f(1,2)。私はそれが12 12またはだと思ったf(1,2) f(1,2)

4

2 に答える 2

5
h(f(1,2))

f(1,2)に置き換えられaます。or演算子aの対象ではないため、 に展開されます。これで に展開されます。###12g(12)"12"

g(f(1,2))

f(1,2)に置き換えられaます。適用される#演算子aはマクロ展開を防止するため、結果は文字通り"f(1,2)".

于 2012-07-23T10:06:04.623 に答える
3

交換作業を行うだけです。

h(f(1, 2)) -> g(12) -> "12"

g(f(1,2)) -> "f(1, 2)"

こちらもご覧ください

于 2012-07-23T09:59:19.867 に答える