【发布时间】:2011-03-21 05:16:15
【问题描述】:
我进行了搜索,但没有找到任何与我的查询相关的内容。 我目前正在调试一个 C 优化器,有问题的代码如下所示:
while( x-- )
array[x] = NULL;
在这种情况下应该发生什么?这个逻辑的结果是否应该在所有编译器中保持一致?
假设在这种情况下 x 的初始值为 5。
问题是程序崩溃了,我的理解是负数组元素引用造成的。
任何帮助将不胜感激。
【问题讨论】:
-
数组永远不会被负值索引(前提是
x以非负数开头)。当x变为0(随后递减为-1)时,无论如何都不会执行主体,因为0的值被认为是假的。 -
由于 while 循环的控制表达式的结尾是一个序列点,因此在这种情况下,无论您使用后增量还是前增量,我都不希望它有任何区别。除非我遗漏了一些东西,否则我不会期望 x 变为负数。是否有更多代码可以更清楚地说明这个主题?
-
@Sean:这会有所不同——预增量会提前一次迭代终止循环。
-
@Sean:我在回答中提供了一个带有 unsigned 索引的示例。索引是 unsigned(如果是)这一事实使得后增量(特别是 post)很重要。无论如何,如果您使用预增量,循环将在处理
array[0]之前终止。
标签: c post while-loop optimization decrement