拒绝在C中使用< =

时间:2014-07-07 23:38:19

标签: c syntax convention

我在C(以及许多其他语言)中有这种习惯,而不是foo <= bar我会做foo < bar + 1而不知道这是从哪里来的......

这本身不好,还是只是非标准?我的意思是从编码和后来修改代码的上下文...我假设任何好的编译器编译它们都是相同的。

4 个答案:

答案 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 */
}

简而言之,检查等于和大于(或等于和小于)等于创建在比较期间调整值的代码要好得多。