Рассмотрим это:Логические операторы сравнения без управляющих операторов
main()
{
int i = 1;
fork(); fork(); fork();
printf("%d ",i);
}
Выход выше код:
1 1 1 1 1 1 1 1
То есть, в конце есть 8 (2^3) процессы достижения линия printf()
. Теперь рассмотрим следующий код:
main()
{
int i = 1;
fork() && fork() || fork();
printf("%d ",i);
}
Первоначально я думал, что не было бы никакого изменения в звучании, так как результаты сравнения с помощью &&
, ||
не оцениваются с помощью управляющего заявления как if
или while
. То есть, их отбрасывают. Однако Выходной сигнал этого кода:
1 1 1 1 1
Значение, в конце есть 5 процессов, которые достигают printf()
линии.
Мой вопрос: Что делает эта линия делать
fork() && fork()||fork();
Определенно, что-то изменилось. Я никогда не рассматривал использование операторов сравнения, таких как &&
, ||
без контрольных операторов, таких как if
, while
для оценки результата сравнения и, соответственно, принятия некоторых мер. Я думал, что без этих контрольных конструкций операторы сравнения не имеют смысла; они просто вернут 1
или 0
без каких-либо действий.
Очевидно, я ошибаюсь и совершенно не подозреваю об этом использовании операторов.
Возможно, хороший код будет хорошим началом –
@EdHeal Это была головоломка. –
Я не вижу, как это дубликат. Вопрос не в fork(). Как выясняется, речь идет о чем-то называемом «коротком замыкании операторов». Человек, который никогда не слышал об этом термине раньше, не может посмотреть это (это так, на этот раз) –