3

誰かがこのプログラムの出力を説明できますか -

#include<stdio.h>
#include<conio.h> 

#define FUDGE(k) k+3.14159
#define PR(a) printf(#a" = %d\t ",(int)(a))
#define PRINT(a) PR(a);putchar('\n')

int main()
{
    int x=2;

    PRINT(x*FUDGE(2));
    printf(\n);
    PR(x*FUDGE(2));

    return 0;
}

出力 -

x*2+3.14159 = 7

x*FUDGE(2) = 7

FUDGE(2)最初のステートメントではなく、2 番目に出力されるのはなぜですか。

4

2 に答える 2

6

#オペレーターがおかしい。パラメータを展開する前に機能します。

したがって、 を呼び出すとPR(x*FUDGE(2))、 展開される前に#が適用されます。 ただし、 では、に渡す前に展開されます。該当する場合は、すでに展開されています。x*FUDGE(2)FUDGE
PRINT(x*FUDGE(2))FUDGEPRPR#

于 2013-08-27T06:39:24.870 に答える
1

最初はPRINT、「呼び出す」ときに引数を展開する whichを使用するためPRです。

于 2013-08-27T06:39:12.573 に答える