作者cppguide (洗屁屁)
看板C_and_CPP
标题Re: [FAQ&FME] C 语言新手十诫
时间Sun Aug 28 22:31:59 2005
※ 引述《yaca (Jay)》之铭言:
: 在k大原po的第十一点,macro中,如果我的程式码:
: #include<stdio.h>
: #define squared(a)a*a-a*a
: int main(void){
: int x=3,i;
: i=squared(++x);
: printf("i=%d\n",i);
: return 0;
: }
: 为什麽答案为-24,可以教教我吗?
: 谢谢罗
i=squared(++x);
展开只如下
i=++x*++x-++x*++x
再加上运算优先括号
i=[(++x*++x)-(++x*++x)]
又运算方向为由左至右,因此
i=[(++x*++x)-(++x*++x)]
4 5
遇到)时做*运算 此时x=5
所以为 5*5=25
再来做第2个()运算,即
i=[25-(++x*++x)]
6 7
遇到)时做*运算 此时x=7
所以为 7*7=49
最後再做[]中的-运算
i=[25-49]=-24
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.141.44