这是 C程序:
int main()
{
short int i = 0;
for( ; ++i ; ) // <-- how this is checking condition
printf("%u,", i);
return 0;
}
从上面的程序我认为这将是一个无限循环,因为for()
没有什么可以检查条件并从循环中出来。
但我错了,不是无限循环。
我的问题:
for( ; ++i ; )
如何检查上述程序中的条件?
答案 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++)
无限循环