在C族中,在循环中为什么"小于或等于"比"小于"符号更优先?

Flo*_*ind 1 c c# c++

为什么在C系列语言中,当我们对任何循环使用计数器时,最优选的比较是Greater Equal To <=反转?请看看这三段代码

for (var i = 0; i <= 5; i++)
{...}/// loop1

for (var i = 0; i < 6; i++)
{...}/// loop2

for (var i = 0; i != 6; i++)
{...}/// loop3
Run Code Online (Sandbox Code Playgroud)

我理解为什么不鼓励循环3,因为代码中的某些东西可以分配i > 5导致无限循环.但是loop1并且loop2基本上是相同的,并且loop2可能是更好的性能,因为只进行了一次比较.那么为什么loop1更优选.它只是惯例还是还有更多东西?

注意:我没有正式的编程培训.当我需要更好的工具来编程8051而不是使用汇编语言时,我只是选择了C.

Bar*_*mar 10

for循环通常用于迭代数组,限制是数组的长度.由于数组是从零开始的,因此最后一个有效元素是length-1.所以选择是在:

for (int i = 0; i < length; i++)
Run Code Online (Sandbox Code Playgroud)

for (int i = 0; i <= length-1; i++)
Run Code Online (Sandbox Code Playgroud)

第一个更简单,所以它是首选.结果,即使限制不是数组大小,这个习惯用法也变得普遍.

我们不使用!=因为偶尔我们会编写循环,其中索引按可变步长递增,有时它会跳过限制.因此使用<比较更安全,因此这些不会变成无限循环.

  • 你没有给`i`一个类型,所以也许值得指出的是,如果`i`是`unsigned`,`length`为零,第二个循环会做一些完全错误的事情. (3认同)