1. Си / Говнокод #3347

    +143

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    switch(pin){
    		case 0:
    		break;
    		case 1:
    		ADMUX = 1;
    		case 2:
    		ADMUX = 1 << 1;
    		case 3:
    		ADMUX = 1 | 1 << 1;
    		case 4:
    		ADMUX = 1 << 2;
    		case 5:
    		ADMUX = 1 | 1 << 2;
    		case 6:
    		ADMUX = 1 << 1 | 1 << 2;	
    	}

    Микроконтроллерный говнокод. Этот кусочек указывает, с какого вывода считывать показания АЦП. Эквивалент:
    ADMUX |= pin;

    Запостил: age, 29 Мая 2010

    Комментарии (18) RSS

    • Почему break; только в case 0 ?
      Ответить
      • Так что да, никакой не эквивалент!
        Ответить
      • Этот свитч не крутился в цикле, так что break - часть его говнокодной сущности.
        Ответить
    • И ещё ADMUX |= pin; равносильно ADMUX = ADMUX | pin; а в приведенном примере ADMUX с правой части вообще не используется.
      Эквивалентный код в данном случае:
      if( 0 < pin && pin < 7 ) ADMUX = 6;
      Ответить
      • Причем еще все числа разложены на побитовые операции ))
        1 << 1 == 2 == pin
        1 | 1 << 1 == 3 == pin и тд. )
        Ответить
        • Поздравляю! Вы наконец вкурили суть данного быдлокода.
          Ответить
      • Используется за пределами данного примера. Ваш код совсем не эквивалентен.
        Ответить
        • Эквивалентен приведенному коду. А то что за пределами, это уж извините, ясновидящих тут нет.
          Ответить
          • Признаю, я забыл как ведет себя switch, а также спутал эквивалент данному коду с примененным мной фиксом: http://github.com/age/mss/commit/ff1db73fee740750eb5f33d1c3d281e0f6afa690
            Ответить
    • показать все, что скрытоПидорас ваторн где?
      Ответить

    Добавить комментарий