請高手幫我解釋一下這一題

#define plus(a,b) a+b

#define minus(a,b) a-b

main()

{

int m1=3,m2=5;

m1=plus(m1,m2)*minus(m2,m1);

printf("%d",m1)

}

答案是25,為什麼不是(3+5)*(5-3)=16

1 Answer

Rating
  • 1 decade ago
    Favorite Answer

    1. 在知道程式錯誤前,先了解「巨集」的意義 :

    在 C 語言中, #define Fuc(x,y) 是一種巨集函數

    在 Compiler 前,程式會將其所傳的參數內容,以『字串模式』原封不動地傳給編譯系統Compiler。

    圖片參考:http://l.yimg.com/f/i/tw/ugc/rte/smiley_22.gif

    因此,在作『巨集函數』時,最好將運算式中的每個參數,都將上括弧( ),來避免不必要的疏忽 !!

    圖片參考:http://l.yimg.com/f/i/tw/ugc/rte/smiley_6.gif

    例如 :

    #define plus(a,b) a+b ; 在 compiler 前 ,系統所得到的是 a+b 這一組字串 ,而不是 a+b 的回傳值 !!

    圖片參考:http://l.yimg.com/f/i/tw/ugc/rte/smiley_3.gif

    2.因此可知

    #define plus(a,b) a+b

    #define minus(a,b) a-b

    main()

    {

    int m1=3,m2=5;

    m1=plus(m1,m2)*minus(m2,m1);

    printf("%d",m1)

    }

    在 Compiler 前,系統所得到的文字模式為

    #define plus(a,b) a+b

    #define minus(a,b) a-b

    main()

    {

    int m1=3,m2=5;

    m1=m1+m2*m2-m1; // plus(m1,m2) 代表字串 'm1+m2' ,minus(m2,m1)代表字串'm2-m1'

    printf("%d",m1)

    }

    Compiler 後,執行得

    m1=m1+m2*m2-m1= 3+5*5-3=3+25-3=25

    圖片參考:http://l.yimg.com/f/i/tw/ugc/rte/smiley_1.gif

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.