Для всех приемлемых языков / языковых реализаций они должны быть одинаковыми.
Как отмечали другие, синтаксис if (a && b && c) {code} оптимизирован разумными компиляторами.
Что до сих пор не объяснено, так это то, что они частично оптимизированы, потому что компилятору придется активно делать неправильные вещи, чтобы сделать его менее оптимизированным. Причина в том, что это «короткое замыкание» обычно также встроено в машинный код. Ваш код станет ассемблерным кодом, например:
IFNOT a, skip_code
IFNOT b, skip_code
IFNOT c, skip_code
code:
...
skip_code:
...
И, таким образом, ЦП будет проходить через каждый из этих тестов, если проверка не будет завершена. Если if находит ошибку, она просто переходит в конец и игнорирует остаток блока if (...) {code}.
Обратите внимание, как это выглядит:
if (a) {
if (b) {
if (c) {
code
}
}
}
Это одно и то же. Любой здравомыслящий компилятор удостоверится, что они одинаковы.
Чтобы сделать это БЕЗ короткого замыкания, автору компилятора придется активно выбирать что-то вроде:
SET badForCodeRun,False
IF a, skipA
SET badForCodeRun, True
GOTO skipCode
skipA:
IF b, skipB
SET badForCodeRun, True
...
skipCode:
Честно говоря, я даже не удосужился напечатать это неправильно, потому что это так многословно и глупо :) Короткий ответ: это никогда не будет иначе, чем короткое замыкание.