0
#include<stdio.h>

#define MAX(a,b) (a>b?a:b);

main()
{
 int x;
 x=MAX(3+2,2+7)
 printf("%d",x);
}

このプログラムの出力が9になることを確認しました。なぜですか?

4

4 に答える 4

10

すべてが正常に機能しているためです。

于 2012-08-31T13:32:53.023 に答える
2

...9 は 5 よりも大きいので? 私はあなたが本当にそれがどのように機能するかを尋ねていると思います. (三項演算を調べたいかもしれません)それで...

#define MAX(a,b) (a>b?a:b); 

マクロです。名前は MAX で、"a" と "b" の 2 つの値を取ります。a が b より大きい場合は a が返され、そうでない場合は b が返されます。

この場合、3+2=5=a および 2+7=9=b です。したがって、マクロは次のように要約されます。

if (5 > 9)
  return 5
else
  return 9

次に、コードが実行されているときに、マクロ呼び出しがそのコードに置き換えられていると考えることができます。

void main()
{
    int x;
    if (5 > 9)
        x = 5;
    else
        x = 9;
    printf("%d", x);
}

明らかに 9 を返します。これは 'x' として保存され、出力されます。

それは役に立ちますか?

于 2012-08-31T13:36:39.623 に答える
2
#define MAX(a,b) (a>b?a:b);

int マクロ定義、三項 if espression?:はこのように動作します

調子 ?[条件が真の場合の値] : [条件が満たされない場合の値]

条件は、C で有効な任意の式です (したがって、0 は偽で、それ以外はすべて真です)。

条件が満たされた場合、式は最初の値 ( の直後の値) に評価され、条件が満たされない場合?は 2 番目の値 ( の直後の値) に評価されます。:

于 2012-08-31T13:38:15.143 に答える
0

2+7=9 は 3+2=5 よりも大きいからです。

それでも、一般に、その種のマクロを作成するときは、マクロを置き換える式でパラメーターを括弧で囲むように注意する必要があります。これにより、使用している演算子よりも優先順位の低い演算子を含む式を誰かが渡すリスクを回避できます。したがって、あなたの表現を台無しにします。

したがって、通常は次のように記述します。

#define MAX(a,b) ((a)>(b)?(a):(b));
于 2012-08-31T13:34:35.397 に答える