LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 670|回复: 4

一个关于宏和函数的问题!

[复制链接]
发表于 2004-4-18 22:57:43 | 显示全部楼层 |阅读模式
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x)y)

int Min1(int a,int b)
{
        return (a<b?a:b);
}

void main()
{
        int x=10,y=20,min;
    int min1;
        min=MIN(x-y,x+y)-10;
        min1=Min1(x-y,x+y)-10;
    printf("min=%d\n",min);
        printf("min1=%d\n",min1);
}
在这个程序中
min的输出是-10
而min1的输出-20
不知道为什么?
请执教!
发表于 2004-4-19 08:28:25 | 显示全部楼层
把宏展开就知道了
发表于 2004-4-19 13:13:41 | 显示全部楼层

优先级问题:

展开为
   min=(x-y)<(x+y)?(x-y)x+y)-10;

   min = (-10)<(30) ? (-10) : 20;
   min = -10;
减法优先级比 : 高, 将宏如下定义就OK了:

#define MIN(x,y) (   (x)<(y)?(x)y)  )
发表于 2004-4-19 13:14:43 | 显示全部楼层

优先级问题:

展开为


  1.    min=(x-y)<(x+y)?(x-y):(x+y)-10;

  2.    min = (-10)<(30) ? (-10) : 20;
  3.    min = -10;

  4.    // 减法优先级比 : 高, 将宏如下定义就OK了:

  5. #define MIN(x,y) (   (x)<(y)?(x):(y)  )

复制代码
 楼主| 发表于 2004-4-21 02:11:56 | 显示全部楼层
谢谢各位!!
我明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表