blavsth
blavsth
采纳率66.7%
2018-10-25 11:25

刚开始学c++,看到这个除法的例子不太懂

已采纳

新手,为什么这个运行结果是16
#include
#define f(x) x*x
using namespace std;
int main()
{
int a=4, b=2, c;
c=f(a) / f(b);
cout << c << endl;
return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 3年前

    因为宏是机械的替换,没有括号。所以是c=4*4/2*2=16
    你可以试试看define f(x) (x*x)
    如果问题解决请点我回答右边的采纳,谢谢

    点赞 5 评论 复制链接分享
  • heisetianlang heisetianlang 3年前

    宏直接将c = f(a) / f(b);展开为c=a * a / b * b;
    由于乘除优先级一样,所以没有达到预期效果。
    因此定义宏最好都加括号保护
    #define f(x) (x * x)
    可以解决本次的问题
    c = f(a) / f(b);展开就变成了c=(a * a) / (b * b);
    但是仍不够严谨
    c = f(a + b);会被展开成c = (a + b * a + b);
    因此需要再加一层括号作为保护:
    #define f(x) ((x) * (x))
    此时
    c = f(a) / f(b);展开为c=((a) * (a)) / ((b) * (b));
    c = f(a + b);展开为c=((a + b) * (a + b));

    点赞 1 评论 复制链接分享