为什么这两个语句不相等?IF语句中没有分号
如果我== 3然后fork()被执行。
如果我!= 3那么fork()不会被执行。
这是怎么回事?这是否是某种编译器优化故障?
if((i==3) && (fork()==0))
if((fork()==0) && (i==3))
为什么这两个语句不相等?IF语句中没有分号
如果我== 3然后fork()被执行。
如果我!= 3那么fork()不会被执行。
这是怎么回事?这是否是某种编译器优化故障?
if((i==3) && (fork()==0))
if((fork()==0) && (i==3))
这是合乎逻辑的&&
运营商进行短路评价的直接结果是:如果i != 3
,if
声明知道,表达式的结果将是false
,并停止在那里。
这就是为什么它不能执行fork
。如果你不想要这种行为,你可以使用按位AND运算符&
。
但是,您的代码的逻辑仍然值得怀疑,因为在i != 3
时,您不可能知道您登陆的“叉子”的哪一侧。
如果你想要做一个fork
不管什么i
值,但适当地获得了“叉”的一面,做叉前期,并检查if
里面的结果:
pid_t side = fork();
if (i == 3) {
if (side == 0) {
...
} else {
...
}
} else {
if (side == 0) {
...
} else {
...
}
}
这叫做short-circuit evaluation。如果第一项是错误的,你知道整个&&
将是错误的,所以很多语言故意跳过第二次评估。
C的& &运算符的右侧在左侧不正确时不会执行。
我的猜测是,一旦第一个值是假的,它不需要检查下一个。我不是C程序员。 – Bob 2015-03-30 17:49:14