C语言在宏定义中声明三目运算符#define A(a,b) (a>b)?a:b的运算问题,环境为codeblocks_10.05 5C

#include
#define A(a,b) (a>b)?a:b

int main()
{
printf("%d",A(8,2)*5);//结果为8
return 0;
}

/*
#include
#define A(a,b) ((a>b)?a:b)

int main()
{
printf("%d",A(8,2)*5);//结果为40
return 0;
}*/

2个回答

宏只是机械地文本替换,而不是像函数那样按照优先级和变量来执行
你的程序中的宏应该修改为

#define A(a,b) ((a)>(b))?(a):(b)

【若有帮助,采纳一下谢谢】
举个例子

#define add(a,b) a+b
int main(){
        printf("%d\n",add(1,2));  //3
    printf("%d\n",add(1,2)*2);  //5
}

其实add(1,2)是替换成了1+2
第一句替换为1+2所以为3
第二句替换为1+2*2而不是(1+2)*2所以为5
使用define定义时只会直接替换而不会加括号之类的

所以你的第一句变成了 8>2?8:2*5
第二句变为(8>2?8:2)*5

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问