Как это работает?

Тема в разделе "Микроконтроллеры AVR", создана пользователем Tomasina, 31 авг 2017.

  1. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    byte selectNextColor()
    {
        return colors[colorIndex++] || colors[colorIndex = 1];
    }
    Не могу понять как вычисляется return.
     
  2. rkit

    rkit Гуру

    Чудовищьный говнокод. Возвращает 1, если colors[colorIndex+1], или colors[1] больше нуля, иначе .0
     
  3. Green

    Green Гик

    И такого полно!
    Ну если ты возвращаешь false/true (лог операция), на кой ху. здесь byte!
    Возвращаем false, если значение colors[colorIndex] == 0 иначе, если colors[1] == 0.
    Народ тащится от корявости своего кода! Типа, как я крут!
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    90% ардуинщиков пишут int при даже при определении пинов :mad: У Блюма в самом начале не хватило соображалки написать const byte или #define, и все подхватили это вирус.

    P.S. я еще застал те времена, когда Windows жила на 14 дискетах, лично ставил. Сейчас оно занимает 8 Гб при практической той же функциональности.
     
  5. Green

    Green Гик

    int - это для упрощения, дабы не забивать начинающим голову препроцессором и причим, тем же const.
    Ну и для компилятора это лучше, нежели define, которое не проследишь.)
    А вообще, во всём приходится искать компромисы.)
     
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    то есть сначала научить как проще, но неправильно, а затем переучивать? Подход чисто по-американски.
     
  7. rkit

    rkit Гуру

    Правильно никто учиться не хочет. Будто первый день на форуме.
     
  8. Green

    Green Гик

    Ну а КАК сделать упрощение? "Ты пока на это не смотри, делай так. А потом, когда освоишься, тогда и другие варианты рассмотрим." Нормально. Хотя, можно и по другому.)
     
  9. A.T.M

    A.T.M Нерд

    Извините,я правильно вас понимаю-вы призываете к использованию типа boolean?
     
  10. Green

    Green Гик

    Результат должен соответствовать логике. Что вы хотите получить, такой должен быть и результат. А если хочется "от балды", тогда и поставьте от балды, double, например. Что бы ВСЕ от вас писяли (кипятком)!
     
  11. ostrov

    ostrov Гуру

    bool в avr разве не виртуальный?
     
  12. AlexU

    AlexU Гуру

    Вопрос не совсем корректный. Размер того или иного типа определяет не платформа, а компилятор. В avr-gcc тип bool имеет размер 1 байт. Вот такая вот бессмысленная трата памяти...
     
  13. b707

    b707 Гуру

    Задумывалось явно совсем не это - вангую, что автор рассчитывал получить на выходе colors[colorIndex++], если оно больше нуля или colors[1] в противном случае.
     
  14. Возможна ли ситуация, когда инкремент индекса будет выполнен после присваивания ему единицы?
     
  15. b707

    b707 Гуру

    если поменять условия местами - да. иначе нет
     
  16. AlexU

    AlexU Гуру

    С каким-нибудь старым компилятором может это и прокатило бы -- раньше в качестве истины булевой операции использовалось любое число отличное от '0'. Но с современными компиляторами такой фокус не пройдёт, т.к. они результат булевой операции приводят либо к '1', либо к '0', в зависимости от результата.