gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:14:20 26 4
gpt4 key购买 nike

这是一个C 程序

int main()
{
short int i = 0;

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

return 0;
}

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

但是我错了,它不是无限循环

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

最佳答案

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

如果有符号溢出像无符号溢出一样实现,在某些时候 i 会变得太大而无法放入 short 并且会回绕 并变为 0 - 这将打破循环。基本上 USHRT_MAX + 1 产生 0。

所以把i改成unsigned short i = 0就可以了。

关于通过++i 在 for 循环中检查条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com