gpt4 book ai didi

c - 宏和函数定义的不同输出

转载 作者:行者123 更新时间:2023-11-30 21:47:50 25 4
gpt4 key购买 nike

#include<stdio.h>
#define prod(a,b) ((a>b)?a*a:b*b)

int prod1(int a,int b){
return ((a>b)?a*a:b*b);
}

int main(){
int p=0,q=-1;
int p1=0,q1=-1;
printf("%d ",prod(p1++,q1++));
printf("%d ",prod1(p++,q++));
return 0;
}

输出为:10

为什么不一样?宏定义与函数定义有何不同?为什么会产生不同的结果? 2 个输出不都应该等于 0 吗?

最佳答案

在宏中

#define prod(a,b) ((a>b)?a*a:b*b)

a 和 b 被多次引用。所以

prod(p1++,q1++)

变成

(p1++ > q1++) ? p1++*p1++ : q1++*q2++

请注意,这与调用函数有很大不同

prod1(p1++, q1++)

仅增加p1q1一次。并且确实如此。

关于c - 宏和函数定义的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com