通过++ i检查for循环中的条件

时间:2011-09-04 14:46:48

标签: c loops

这是 C程序:

int main()
{
   short int i = 0;

   for( ; ++i ; )          // <-- how this is checking condition 
     printf("%u,", i);

   return 0;
}

从上面的程序我认为这将是一个无限循环,因为for()没有什么可以检查条件并从循环中出来。

我错了不是无限循环

我的问题:
for( ; ++i ; )如何检查上述程序中的条件?

2 个答案:

答案 0 :(得分:12)

程序错误,因为它溢出了signed int,这是C中的未定义行为。在某些环境中,导致无限循环,但许多编译器实现签名溢出的方式与它们实现的方式相同无符号溢出。

如果签名溢出实现为无符号溢出,则某些点i将变得太大而无法适应短路并且环绕并变为0 - 这将破坏循环。基本上USHRT_MAX + 1会产生0。

所以将i更改为unsigned short i = 0即可。

答案 1 :(得分:1)

for ( init, condition, inc )

您的“条件”是i++。当i++等于0时,它退出。短暂的发生得非常快。

for ( ; ;i++)无限循环

相关问题