如何使用&&和||评估这些fork()调用 C中的运营商?
我在C下面有一些使用fork()
系统调用的代码,但我只是感到困惑:我该怎么做
解决它的作用:
int main() { fork(); fork() || fork() && fork(); fork(); printf("ämit"); }
fork() && fork() || fork();
评估如下所示:
fork() / \ 0/ \>0 || fork() && fork() /\ / \ / \ 0/ \>0 * * || fork() * / \ * *
我需要fork() || fork() && fork()
同一种树 fork() || fork() && fork()
。 任何人都可以告诉我应该如何实现它?
||
优先级低于&&
,并且这些运算符在评估第一个操作数后如果包含足够的数据则会短路(如果第一个操作数为真,则为||
如果第一个操作数为假,则为&&
短路)。
fork()||fork()&&fork()
等效于fork() || ( fork() && fork() )
fork() || ( fork() && fork() )
因此:
fork() 0/ \>0 / * ==> || short-circuits, no evaluation of fork()&&fork() fork() 0/ \>0 && short-circuits, no evaluation of &&fork() ==> * fork() / \ * *
对于你的第一个例子,它等同于( fork() && fork() ) || fork()
( fork() && fork() ) || fork()
。
如果这是一个面试问题(可能)或作业(略有可能),你首先要冷静地解释如何评价它。
我的意思是,你说第一,第二和第五叉是无条件的,但第三和第四叉取决于第二和第三(并且这些第二和第三将在多个过程中发生)。
这将表明您理解这些概念。
然后你解释它并不重要,因为如果有任何编码器实际上交给你这样的代码,就会有一些严重的tar’n’feather动作正在进行。 像这种怪物的代码在现实世界中没有地位,虽然它有助于测试你的理解,但你永远不会在现实中遇到它。