Fork()和&&;C语言中的短路循环
我了解fork,需要帮助了解原因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),而不管右操作数的值如何,因此根本不计算右操作数 您正在使用&&运算符,如果计算返
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的短路行为是的,我也在想同样的事情。。。