Ahm*_*ura 4 c optimization post while-loop decrement
我已完成搜索,但我发现与查询无关.我目前正在调试C优化器,有问题的代码如下所示:
while( x-- )
array[x] = NULL;
Run Code Online (Sandbox Code Playgroud)
在这种情况下会发生什么?并且这个逻辑的结果是否应该在所有编译器中保持一致?
让我们说在这种情况下x的初始值是5.
问题是程序崩溃,我的理解是它是由负数组元素引用引起的.
任何帮助,将不胜感激.
此循环将以x等于-1(假设x已签名)结束,但其正文将不会array[-1]在最后一步生成访问权限.最后一个数组访问是array[0].所有实现中的行为都是一致的.
换句话说,您引用的代码中的负索引数组访问没有问题.但是如果你试图array[x]在循环后立即访问,那么你确实可以访问array[-1].
您引用的代码是一个相当熟知的实现模式的变体,当需要使用无符号变量作为索引向后迭代数组时使用.例如
unsigned x;
int a[5];
for (x = 5; x-- > 0; )
a[x] = 0;
Run Code Online (Sandbox Code Playgroud)
有时经验不足的程序员在向后迭代数组时无法使用无符号索引.(由于无符号变量从不具有负值,因此循环终止条件的初始实现x >= 0不起作用.)这种方法 - 即循环终止条件中的后增量 - 在这种情况下有效.(当然,它也适用于签名索引).