Fork()和&&;C语言中的短路循环

Fork()和&&;C语言中的短路循环,c,fork,C,Fork,我了解fork,需要帮助了解原因 if(fork() && !fork()) 不计算第一个子进程中的第二个fork过程 父级返回[X | X>0]^![Y|Y>0] child.0返回0,不调用第二个fork过程 child.1返回[X | X>0]^!0 为什么child.0不调用第二个fork过程 谢谢如果&&的左操作数的计算结果为0(false),那么整个表达式的计算结果将为0(false),而不管右操作数的值如何,因此根本不计算右操作数 您正在使用&&运算符,如果计算返

我了解fork,需要帮助了解原因

if(fork() && !fork())
不计算第一个子进程中的第二个fork过程

父级返回[X | X>0]^![Y|Y>0]
child.0返回0,不调用第二个fork过程
child.1返回[X | X>0]^!0

为什么child.0不调用第二个fork过程


谢谢

如果
&&
的左操作数的计算结果为0(false),那么整个表达式的计算结果将为0(false),而不管右操作数的值如何,因此根本不计算右操作数

您正在使用
&&
运算符,如果计算返回0,if将立即终止。基本上,如果从左到右执行,并且在
&&
运算符的情况下,一旦遇到0(或false),终止立即终止

当第一个
fork()
返回0时,不会调用第二个
fork()
,因为无论
fork()
返回什么,布尔表达式
(0&&fork())
都将始终为0。因此,为了提高性能,第二个
fork()
被短路而不执行。

当你说孩子返回某个东西时,fork()的返回值并不像你想象的那样是孩子返回的。要检查您是否必须使用wait()。

您已经回答了自己的问题;因为
&&
@OliCharlesworth的短路行为是的,我也在想同样的事情。。。