Разница в том, что?
читаемость? Да, есть разница. Первое намного яснее и намного лучше выражает ваши намерения. Кроме того, он занимает меньше строк в редакторе, что само по себе не обязательно является преимуществом, но делает код более легким для чтения и мгновенного просмотра для любого, кто придет и захочет его отредактировать.
Производительность / "скорость"? Нет. Я бы поспорил на реальные деньги, что нет абсолютно никакой заметной разницы, как только вы запустите эти два фрагмента кода через компилятор с включенной оптимизацией. И это не займет много времени, чтобы убедить меня сделать ставку на тот же случай, даже если оптимизация отключена .
Почему? Потому что в C (и во всех известных мне C-производных языках) оператор &&
выполняет оценку короткого замыкания , что означает, что если первое условие оценивается как ложное, то оно не ' даже не стоит оценивать второе условие, потому что нет никакой возможности, чтобы все утверждение могло когда-либо оказаться верным.
Вложение операторов if
было обычной уловкой «оптимизации» в старые добрые времена VB 6, когда оператор And
не выполнял оценку короткого замыкания. Нет смысла использовать его в C-коде, если только он не улучшает читаемость. И если честно, если вы столкнетесь с компилятором, который не делает эти два фрагмента кода полностью эквивалентными с точки зрения производительности, то пришло время выбросить этот компилятор и прекратить его использование. Это самая базовая оптимизация под солнцем, «низко висящий фрукт» для авторов компиляторов. Если они не могут понять это правильно, я бы не стал доверять им остальную часть вашего кода.
Но, в общем, беспокойство по поводу такого рода вещей (которые определенно подпадают под категорию «микрооптимизации») не помогает вам писать лучший код или стать лучшим программистом. Это просто заставляет вас тратить много времени, задавая вопросы о переполнении стека, и способствует репутации таких пользователей, как я, которые публикуют один и тот же ответ на 2 - 3 похожих вопроса в неделю. И это время, когда вы не тратите написание кода и улучшаете свои навыки ощутимыми способами.