[英]How do I evaluate these fork() calls with the && and || operators in 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()
。 任何人都可以告訴我應該如何實現它?
如果這是一個面試問題(可能)或作業(可能性略低),你先冷靜地解釋你如何能進行評估。
我的意思是,你說第一,第二和第五個叉子是無條件的,但第三個和第四個叉子取決於第二個和第三個(並且這些第二個和第三個將在多個過程中發生)。
這將表明您理解這些概念。
然后你解釋它並不重要,因為如果有任何編碼器實際上交給你這樣的代碼,就會有一些嚴重的tar'n'feather動作正在進行中。 像這種怪物的代碼在現實世界中沒有地位,雖然它有助於測試你的理解,但你永遠不會在現實中遇到它。
||
優先級低於&&
,並且這些運算符在評估第一個操作數后如果包含足夠的數據則短路(如果第一個操作數為真,則為||
如果第一個操作數為假,則為&&
短路)。
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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.