首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“GNU C编程教程”错误

“GNU C编程教程”错误
EN

Stack Overflow用户
提问于 2017-07-14 23:02:09
回答 1查看 175关注 0票数 3

我当时正在读"The GNU C Programming Tutorial",我想我发现了一个非常小而微妙的错误。就在这个chapter上。在delete_multiples_of_prime(...)函数中,在for循环中:

代码语言:javascript
复制
delete_multiples_of_prime (int prime)
{
  int index, multiplier = 2;

  for (index = prime * multiplier; index < ARRAY_SIZE; index = prime * multiplier++)
    sieve[index] = DELETED;
}

我认为问题在for的增量部分。作者用后增量操作符代替了增量前操作符,考虑到这一点,我认为循环将以初始索引值执行两次。

我说的对吗?

注:我很确定我是对的,如果我在别的地方找到了它,我不会发这个,但是在那里.这让我怀疑。当然,我知道即使我是对的,表现上的差异也是可以忽略不计的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 23:29:51

对于第一个索引,循环运行两次是正确的。

但是,这不是一个bug,因为赋值是一个幂等操作,因此一个给定索引的多个赋值不会有进一步的影响或副作用。即使第一个索引被重复了两次,函数的工作方式也是一样的。

性能,差异应该可以忽略不计,因为每个函数调用只需要额外分配一次。(由于幂等性,编译器也可以简单地对其进行优化)。

尽管如此,为了清楚起见,如果for循环体被更改为不再幂等(例如添加printf语句),我将亲自使用前缀增量:

代码语言:javascript
复制
for (index = prime * multiplier; index < ARRAY_SIZE; index = prime * ++multiplier)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45112705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档