所以这是有效的代码。发布它没有任何变化。 X和Y值必须在0和1024之间.tyleSize是1024;
// for 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,所有类型的nombers都是通过max和min来切割的。
有没有我不了解的关于C ++编译器的东西,或者有一些愚蠢的错误?
答案 0 :(得分:9)
确保您实际使用min
中的max
和<algorithm>
函数,而不是其他地方定义的某些宏。例如,Windows标头windef.h
定义max
,如下所示:
#define max(a,b) (((a) > (b)) ? (a) : (b))
这在您的代码中不起作用,因为它可能会对每个参数进行两次评估,并且rand
每次都会返回不同的结果。
尝试在预处理后查看源代码,看看您是否正在使用这些宏。您可以在包含任何标题之前定义NOMINMAX
来关闭Windows宏。