2

私はc言語が初めてです。マクロが正しく動作しない理由を知りたかっただけです。期待される出力が24であるのに対し、出力は13になります。

#include<stdio.h>
#define mult(a,b) a*b
int main()
{
    int x=4,y=5;
    printf("%d",mult(x+2,y-1));
    return 0;
}
4

4 に答える 4

6

mult(x+2,y-1)に展開すると、次の出力x +2 * y -14 + 2 * 5 -1得られます13

(4 + 2) * (5 -1)あなたは答え= 6 * 4=を期待しているかもしれません24。このように展開するには、@H2Co3 として括弧マクロを記述する必要があります。

#define mult(a,b) ((a)*(b))

また読む:では、マクロを使用することの何が問題なのですか? ビャルネ・ストロストラップ著。

于 2013-07-09T16:06:19.617 に答える
5

これは、C マクロは単純なテキストの置換であるためです。マクロの作成者は、置換されたマクロ変数とマクロ展開自体の周りに必ず括弧を挿入して、結果として生じる展開が新しい意味を帯びないようにする必要があります。

プログラムを観察すると、次のmult(a, b)ように定義されますa * b

mult(x + 2, y - 1) = x + 2 * y - 1 = 4 + 2 * 5 - 1 = 4 + 10 - 1 = 13

正しい方法は次のとおりです。

mult(a, b) ((a) * (b))
于 2013-07-09T16:07:19.867 に答える