我在C(以及许多其他语言)中有这种习惯,而不是foo <= bar
我会做foo < bar + 1
而不知道这是从哪里来的......
这本身不好,还是只是非标准?我的意思是从编码和后来修改代码的上下文...我假设任何好的编译器编译它们都是相同的。
答案 0 :(得分:8)
由于多种原因,这很糟糕:
-2.5 <= -3
为false,但-2.5 < -3 + 1
为真)这是不好的和非标准。真的没有理由继续强化这个习惯 - 你只是为了以后的编码生涯而在脚下射击。
答案 1 :(得分:5)
我认为个人不太清楚。如果foo和bar不是整数,那也可能是坏事;例如,如果foo = -7且bar = -7.5,那么这两个意味着不同的东西。
答案 2 :(得分:2)
根据您的评论:
它有助于防止出现多少循环迭代的错误
您最有可能以这两种方式提及循环:
方法I:
for(int i = 0; i < length; i++){ // }
介于0和length-1之间。
对战:
方法II:
for(int i = 0; i <= length-1; i++){ //}
也介于0和长度-1之间。
在这些特殊情况下,两者都有效,但正如Derek Redfern在上面的回答中所述,不要让你的代码变得更加复杂。
答案 3 :(得分:1)
非常破碎,特别是当你做
时int foo = <whatever>;
int bar = INT_MAX;
if (foo < bar + 1) {
/* guaranteed to never be called */
}
此外,如果您以其他方式“调整”它,它可能会破坏,如此
int foo = INT_MIN;
int bar = <whatever>;
if (foo - 1 < bar ) {
/* again guaranteed never to be called */
}
简而言之,检查等于和大于(或等于和小于)等于创建在比较期间调整值的代码要好得多。