Код (C++): byte selectNextColor() { return colors[colorIndex++] || colors[colorIndex = 1]; } Не могу понять как вычисляется return.
И такого полно! Ну если ты возвращаешь false/true (лог операция), на кой ху. здесь byte! Возвращаем false, если значение colors[colorIndex] == 0 иначе, если colors[1] == 0. Народ тащится от корявости своего кода! Типа, как я крут!
90% ардуинщиков пишут int при даже при определении пинов У Блюма в самом начале не хватило соображалки написать const byte или #define, и все подхватили это вирус. P.S. я еще застал те времена, когда Windows жила на 14 дискетах, лично ставил. Сейчас оно занимает 8 Гб при практической той же функциональности.
int - это для упрощения, дабы не забивать начинающим голову препроцессором и причим, тем же const. Ну и для компилятора это лучше, нежели define, которое не проследишь.) А вообще, во всём приходится искать компромисы.)
Ну а КАК сделать упрощение? "Ты пока на это не смотри, делай так. А потом, когда освоишься, тогда и другие варианты рассмотрим." Нормально. Хотя, можно и по другому.)
Результат должен соответствовать логике. Что вы хотите получить, такой должен быть и результат. А если хочется "от балды", тогда и поставьте от балды, double, например. Что бы ВСЕ от вас писяли (кипятком)!
Вопрос не совсем корректный. Размер того или иного типа определяет не платформа, а компилятор. В avr-gcc тип bool имеет размер 1 байт. Вот такая вот бессмысленная трата памяти...
Задумывалось явно совсем не это - вангую, что автор рассчитывал получить на выходе colors[colorIndex++], если оно больше нуля или colors[1] в противном случае.
С каким-нибудь старым компилятором может это и прокатило бы -- раньше в качестве истины булевой операции использовалось любое число отличное от '0'. Но с современными компиляторами такой фокус не пройдёт, т.к. они результат булевой операции приводят либо к '1', либо к '0', в зависимости от результата.