在硬件故障的情况下哪个更容易失败:(int i = 0; i!= n; ++ i)或(int i = 0; i< n; ++ i)?

时间:2015-12-04 16:41:30

标签: c# algorithm bit-manipulation hardware integer-arithmetic

显然,

for ( int i = 0; i != n; ++i )

的作用相同
for ( int i = 0; i < n; ++i )

但开发人员对前者感到不安是否正常?我总是担心一些怪异的事故会使前循环中的i“错过”n。然而,在第二个循环中,如果i以某种方式停止正确递增,那么<运算符将充当障碍。

这使我今天想到了一个问题,即在各种各样的怪异事故中,这个问题实际上更有可能失败。这里对编译器/硬件有所了解的人可能会对我有答案。

2 个答案:

答案 0 :(得分:2)

我可以同情你,因为当我开始编程时,我也有同样的感受。它只是你必须得到使用的东西。这两种方法都有时间和地点。例如,如果您正在使用c ++标准库,请使用第一种方法:

for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)

如果您只是循环固定次数,则惯例是使用第二种方法:

for (unsigned int i = 0; i < N, i++)

不要浪费时间担心硬件问题。这是别人的工作。

答案 1 :(得分:1)

我认为更喜欢&lt;选项(我一直使用)不是为了防止硬件故障(不可行,因为根据定义,所有的赌注都是关闭的,除非你编写非常特殊的内核/ fw代码),但要防止出现逻辑错误(并且感觉更安全一些)一些基本的人类本能原因不是出于逻辑原因。)

被保护的错误类型是在循环内修改循环计数器的地方。

反驳论点是任何改变i的代码都是&gt; n可能是错误的(除非这是某人强制循环退出的方式 - 一个坏主意恕我直言)所以你应该允许循环运行在数组的末尾并失败(假设你在一个检测到结束访问的平台上一个数组,Java,c#,...)。