这是一个C程序:
int main()
{
short int i = 0;
for( ; ++i ; ) // <-- how this is checking condition
printf("%u,", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从上面的程序我认为这将是一个无限循环,因为for()没有什么可以检查条件和从循环出来.
但我错了,这不是一个无限循环.
我的问题:
如何for( ; ++i ; )在上述程序中检查条件?
cni*_*tar 12
该程序是错误的,因为它溢出了一个signed int,这是C中的未定义行为.在某些环境中,它将导致无限循环,但许多编译器实现有符号溢出的方式与它们实现无符号溢出的方式相同.
如果签名溢出实现像无符号溢出,在某些时候i将变得太大而不适合短路并且将环绕并变为0 - 这将打破循环.基本上USHRT_MAX + 1收益率为0.
所以换i到unsigned short i = 0并且没关系.