你会用while(1)还是for(;;)写循环代码?

💡 原文中文,约2500字,阅读约需6分钟。
📝

内容提要

for(;;)和while(1)都是无限循环的写法,学术界和工业界认为for(;;)更优秀,因为它只执行了两次空语句,执行速度更快。实际情况下差异较小,选择取决于开发者的编程习惯和个人口味。无限循环通常不是最佳代码,因为消耗资源。在编译器中,while(1)可能会有警告,而for(;;)不会。

🔎

延伸解读

理论优势与实际编译结果

文章指出,学术界和工业界认为 for(;;) 比 while(1) 更优,因为 while(1) 需要额外判断,而 for(;;) 只执行两次空语句,理论上更快。但作者通过 gcc 和 keil 测试发现,两者生成的机器码完全相同,说明实际性能差异微乎其微。因此,在大多数场景下,选择哪种写法对程序运行效率几乎没有影响。

编译器警告与代码风格

文章提到,在一些编译器中,如果检查规则较严格,while(1) 可能会因为常量条件而触发警告,而 for(;;) 则不会。此外,for(;;) 看起来更优雅。这提示开发者,在团队协作或严格编译环境下,选择 for(;;) 可能有助于避免不必要的警告,并保持代码风格一致。

无限循环的使用建议

文章强调,无限循环通常不是最佳代码,因为它会持续消耗资源。在实际开发中,应尽量避免无限循环,除非确实需要持续运行。如果必须使用,for(;;) 和 while(1) 在功能上等价,选择取决于个人习惯。但开发者应意识到,无限循环可能导致程序无法正常退出,需谨慎使用。

❓

Q&A

for(;;)和while(1)有什么区别?

for(;;)比while(1)更优秀,因为它只执行两次空语句,执行速度更快。

在实际编程中,应该选择for(;;)还是while(1)?

选择取决于开发者的编程习惯和个人口味。

无限循环的使用有什么风险?

无限循环通常不是最佳代码,因为它消耗资源。

在编译器中,while(1)会有什么警告吗?

在一些编译器中,while(1)可能会有警告,而for(;;)不会。

for(;;)和while(1)生成的机器码一样吗?

在测试中,for(;;)和while(1)生成的机器码是一样的。

为什么学术界和工业界更倾向于使用for(;;)?

因为for(;;)的执行速度更快,且看起来更优雅。

🏷️

标签

➡️

继续阅读