Ответ 1
||
имеет более низкий приоритет, чем &&
, и те операторы короткого замыкания после оценки первого операнда, если он содержит достаточные данные (||
коротких замыканий, если первый операнд истинен и &&
коротких замыканий если первый операнд ложный).
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()
.