Sta*_*zee 3 c performance for-loop
在浏览 Linux 源代码时,我遇到了以下行:
int tmp;
for (tmp = PIDTYPE_MAX; --tmp >= 0; )
Run Code Online (Sandbox Code Playgroud)
为什么不这样做:
for (tmp = PIDTYPE_MAX; tmp >= 0; tmp--)
Run Code Online (Sandbox Code Playgroud)
这是另一种for循环优化吗?
你的循环不等价:第二个循环包括上限PIDTYPE_MAX,第一个没有。
在循环体之前递减迭代器变量可确保条件0 <= tmp < PIDTYPE_MAX在循环中始终为真。这实际上是 C 中的规范反向循环,其中下限包含在内,上限是不包含的。
请注意,第一个循环需要一个有符号整数才能工作,因此测试 fortmp >= 0是有意义的。(对于无符号整数总是如此。)
无符号类型 likesize_t常用于数组索引和计数,不能为负数。各自的循环是:
for (size_t i = 0; i < N; i++) ... // iterate over [0, N) forwards
for (size_t i = N; i-- > 0; ) ... // iterate over [0, N) backwards
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |