gpt4 book ai didi

c - 需要对该 C 程序的输出进行解释

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

#include <stdio.h>

#define F1(X) ((X > 0) ? X : -(X))
#define F2(X) (X > 0) ? X : -X

int main(){
int a=5, b=10;
printf("F1=%d, F2=%d\n", F1(a-b), F2(a-b));
return 0;
}

输出为:F1=5, F2=-15

当然,我认为F1和F2的输出应该是相同的。括号与输出有什么关系?

最佳答案

此程序简单演示了为什么在表达式中使用宏参数时总是需要将它们放在括号内。它还从更广泛的角度说明了为什么您需要对一般宏非常小心。

I'd think that the output of F1 and F2 should be the same

如果F1F2是函数,而不是宏,输出确实是相同的。但是,宏是简单的文本替换,因此使用和不使用 X 括号得到的两个表达式是不同的:

F1:

((a-b > 0) ? a-b : -(a-b))

F2:

(a-b > 0) ? a-b : -a-b

请注意,由于缺少括号,F2 将一元减号应用于 a,而不是 (a-b)

这仍然是宏的相对简单的使用。想象一下,如果将 X 替换为具有副作用的表达式(如 F2(a++, b--)),您会遇到什么问题。

关于c - 需要对该 C 程序的输出进行解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48949715/

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