if ((v1State==EMPTY) && (v1State==EMPTY)) return(2); if ((v1State==EMPTY) || (v1State==EMPTY)) return(1); return(0);
Затем решил проверить как скомпилирует if (v1State==v2State==EMPTY) return(2); Компилирует но получается чепуха, при равенстве обоих переменных EMPTY. По правилам сравнивает в начале v2State==EMPTY в результате получается не 0, а затем сравнивает v1State которое равно 0(EMPTY первый член перечисления) и результат получается равен 0. То есть false. С одной стороны это хорошо - не претит духу "С" - доверяйте программисту, но хотябы warning выдал - что сравнивается число и логическое выражение. Сейчас и синтаксис скобок проверил. if (v1State==EMPTY && v1State==EMPTY) return(2); Компилируется правильно - GCC для AVR не пропустил бы из за отсутствия кавычек по отдельным проверкам. Так что, с легкой переносимостью программ на "С" несколько перевирают. Во многих книжках char - один байт, а программа от ARM (IAR) вычисления CRC8 не работала на Builder, пришлось пару часов вылавливать где алгоритм не работает так как на ARM.