为什么这两个陈述不相同?
如果i == 3则执行fork()。
如果i!= 3则fork()不会被执行。
这里发生了什么?它是某种编译器优化故障吗?
if((i==3) && (fork()==0))
if((fork()==0) && (i==3))
答案 0 :(得分:1)
这称为short-circuit evaluation。如果第一个术语为假,则您知道整个&&
将为假,因此许多语言都会故意跳过第二个评估。
答案 1 :(得分:0)
这是逻辑&&
运算符执行短路评估的直接结果:当i != 3
时,if
语句知道表达式的结果将是false
,并在那里停止。
这就是为什么它无法执行fork
。如果您不想要此行为,则可以使用按位AND运算符&
。
然而,你的代码的逻辑仍然是有问题的,因为它无法分析" fork"你在i != 3
时降落。
如果你想fork
无论i
的价值是什么,而是正确地得到" fork"的一面,请先做前叉,然后检查结果在if
:
pid_t side = fork();
if (i == 3) {
if (side == 0) {
...
} else {
...
}
} else {
if (side == 0) {
...
} else {
...
}
}
答案 2 :(得分:0)
C&& amp;&当左侧是假的时,不执行操作符。