ребят, кто напомнит в си компилер как разворачивает? if(cond1 & cond2 & cond3) сперва проверит cond3 потом cond2 после чего cond3? и если хотя бы одно условие будет фолс то дальше не проверяет все правильно?
ребят, кто напомнит в си компилер как разворачивает? if(cond1 & cond2 & cond3) сперва проверит cond3 потом cond2 после чего cond3? и если хотя бы одно условие будет фолс то дальше не проверяет все правильно?
Комментарии: 18
Anonim
1-2-3 Вроде того.
Nazar
я вот не помню в какой последовательности
Anonim
Си вроде не арабы писали
Nazar
и был еще такой факап: if(cond1 == 1 & cond2++ == 1 & cond3 == 1) если первая на пути проверка зафолситься то конд2++ не будет
Anonim
Ну, да
Anonim
В 10ке его тоже нет Какое то говно обгрызанное cond2++ судя по факапу можно безболезненно вынести на первое место в условии
Nazar
или написать перед ифом или после него
Anonim
Ну хоть какое-то, чем вообще ничего
Dmytro
Если это опечатка и вы имели ввиду && - то да, выполняет до первого неудачного (слева направо). Если там и правда побитовое "и" - то выполнит все
Anonim
Хотя и не слишком корректно Кстати, да
Nazar
да, опечатка спасибо)
Anonim
Ну и кстати, cond1 и cond3 это числовые или булевы переменные?
Dmitry
флаги условий судя по всему
Anonim
Меня cond2 смущает
Dmitry
а, да. инкремент тогда хз зачем )
Anonim
Так то флаги будут гораздо более читаемыми если их сверять с тру/фолс или просто cond || !cond
Nazar
ну например в цыкле перебираешь массив и с каждым прохождением например проверяешь стала ли переменная тому что надо равно и независимо от результата проверки прибавить или убавить единицу
Dmytro
Есть разные принципы позволяющие не выстрелить себе в ногу на си, вот многие из них сходятся на том, что в if лишнего вставлять не надо. Как пример могу посоветовать misra c