1

所以这是有效的代码。发布它没有任何更改。X 和 Y 值必须介于 0 和 1024 之间。tyleSize 为 1024;

//对于X

int loffx=accurate(curphisobj->x) + (rand() % 100) - 50; //some math, doent matter
loffx=max(loffx,1);
loffx=min(loffx,tyleSize);

//对于Y

int loffy=accurate(curphisobj->y) + (rand() % 100) - 50;
loffy=max(loffy,1);
loffy=min(loffy,tyleSize-3);

但如果我这样写:

int loffy=min(max(accurate(curphisobj->y) + (rand() % 100) - 50,1),tyleSize - 2);
int loffx=min(max(accurate(curphisobj->x) + (rand() % 100) - 50,0),tyleSize);

我得到 loffx 和 loffy 1034, 1029, -5, - 2,所有类型的名词都没有被最大和最小限制。

关于 C++ 编译器有什么我不知道的,还是有一些愚蠢的错误?

4

1 回答 1

9

确保您实际使用的是min和中的max函数<algorithm>,而不是其他地方定义的某些宏。例如,Windows 标头windef.h定义max如下:

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

这在您的代码中不起作用,因为它可能会对每个参数进行两次评估,并且rand每次都会返回不同的结果。

尝试在预处理后查看源代码以查看您是否正在使用宏。NOMINMAX您可以通过在包含任何标题之前定义来关闭 Windows 宏。

于 2013-07-19T21:37:26.477 回答