掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26960

c++ですが
投稿者---samurai(2006/05/23 15:53:45)


c++でも質問してもいいのでしょうか?
実行結果は
x=24 y=47
x=24 y=46
となります。なぜ上のyの値が46ではなく47になるのでしょうか?
#include <iostream.h>

#define MAX(A,B) ((A)>(B) ? (A):(B))

inline int  max(int a,int b)
{
    if(a>b) return a;
    return b;
}

void main()
{
    int i,x,y;

    x=23; y=45;
    i=MAX(x++,y++);

    cout<<"x="<<x<<" y="<<y<<"\n";

    x=23; y=45;
    i=max(x++,y++);
    
    cout<<"x="<<x<<" y="<<y<<"\n";

}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:c++ですが 26961 YuO 2006/05/23 15:58:35


No.26961

Re:c++ですが
投稿者---YuO(2006/05/23 15:58:35)


>実行結果は
>x=24 y=47
>x=24 y=46
>となります。なぜ上のyの値が46ではなく47になるのでしょうか?

そのまんまだと思いますが。
#define MAX(A,B) ((A)>(B) ? (A):(B))

i=MAX(x++,y++);

は,
i=((x++)>(y++) ? (x++):(y++));

に等しいことになります。
よって,
if (x++ > y++) {
    i = x++;
} else {
    i = y++;
}

と等しいことになります。なので,当然yは2回インクリメントされます。
# というか,マクロの副作用に関する有名な注意点です。



この投稿にコメントする

削除パスワード

No.26963

Re:c++ですが
投稿者---samurai(2006/05/23 16:06:38)


理解できました。ありがとうございました!



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧