我对这段C代码有疑问:

int y = 0, h = 640, ih = 640;
h = y + h - max(0, (y + h) - ih);

它应将h设置为640,但应将其设置为0!

您可以看到它在这里运行:http://ideone.com/zBZSsr

对这种奇怪的行为有任何想法吗?难道我做错了什么?

最佳答案

您的代码经过预处理

h = y + h - ((0) > ((y + h) - ih)) ? (0) : ((y + h) - ih);

问题是+和-的优先级高于?:运算符。
#define max(x, y) ((x) > ((y)) ? (x) : (y))

在定义周围添加(),您的计算将是正确的。

关于c++ - 奇怪的C算术行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15180522/

10-09 18:19