Linux编程中‘while(...) continue;’与‘while(...);’的区别
两段waitpid循环代码的区别解析
核心功能一致
两段代码的目标完全相同:通过非阻塞模式的waitpid(-1, NULL, WNOHANG)调用,批量清理当前进程所有已终止的子进程,直到没有可回收的子进程(此时waitpid返回0或-1)。
语法与风格差异
第一段代码:
while (waitpid(-1, NULL, WNOHANG) > 0) continue;用
continue;作为循环体,明确表达“本次循环无额外操作,直接进入下一次迭代”的意图。第二段代码:
while (waitpid(-1, NULL, WNOHANG) > 0);用单独的分号作为空循环体,写法更简洁。
功能等价性
从执行逻辑和最终效果来看,两者完全等价。continue在这里的作用就是跳过循环体剩余部分(本来就没有剩余部分),直接回到循环条件判断,和空循环体的行为没有任何区别。
关于写法选择的说明
权威书籍采用第一种写法,大概率是出于可读性考虑:
- 避免新手误将末尾的分号当成笔误(比如很多人会不小心在
while后加分号,导致逻辑错误),用continue能更清晰地表明循环的意图。 - 代码风格更明确,让阅读者一眼就能理解“循环只是重复调用waitpid,没有其他操作”。
你觉得第二种写法更优的观点没问题,它确实更简洁,在实际工程中两种写法都是合法且正确的,选择哪种更多取决于个人编码习惯或团队的风格规范。
内容的提问来源于stack exchange,提问作者tahzibi.jafar
相关产品推荐
相关产品推荐

