Свежие обсуждения
Микроконтроллеры

switch...case или if...else

В зависимости от нажатой кнопки переменная "а" может принимать значения равные 1,2 или 3. В прерывании по таймеру 0 авр-ки, в зависимости от значения "а", должен выполняться тот или иной код. Думаю сделать выбор с помощью:

switch (a)
{
case 1:
"код1";
...
case 3:
"код3";
}

или

if(a==...){
}
else
if(...
...

А вот как правильнее (быстрее чтобы код выполнялся) сделать? И будет какая-нибудь разница по скорости, если не if else, а так:

if(a==1){"код1";}
...
if(a==3){"код3";}

 

для множественного выбора, по идее, switch быстрее. И читабельность кода намного выше.
При if, даже когда выполнится первое действие, будут выполнены все проверки. При switch этого не будет.
Имеет смысл на первое место в switch ставить наиболее вероятную ветку.

 

switch говорят лучше. но для небольшого кода надо ставить if () { } else { } . и даже до 2х else можно ставить эту конструкцию. А уже если больше, то лучше switch.

 

Идеальный вариант - компилировать программу, потом декомпилировать и посмотреть что будет на асме в обоих случаях. Иногда очень интересные варианты получаются. Так с ходу вообще трудно сказать что эффективнее - от компилятора сильно зависит. Косвенно можно судить по размеру откомпилированного файла - чем меньше, тем эффективнее код (но все-таки не всегда "маленький" является "быстрым").

 

+1. Switch сильно зависит еще от набора проверяемых значений.

 

jusupoff: чем меньше, тем эффективнее код
Часто это как раз противоположные вещи.

 

rfc: jusupoff: чем меньше, тем эффективнее код
Часто это как раз противоположные вещи.

Это когда сокращённые записи команд используют?

 

Digital: Это когда сокращённые записи команд используют?
Не совсем.

например

for (i=0;i<10000;i++) {
#asm
nop;
#endasm
}

памяти будет занимать чуть, но выполняться намного дольше 10000 nop подряд. Из за сбросов конвейера на цикле.

т.е. тут код маленький, а подряд записанный - быстрее, т.е. эффективный img src="/smile/fun-n.gif" width="15" height="15" alt="" />

 

rfc: т.е. тут код маленький, а подряд записанный - быстрее
Всё, понял. Представляю печатный листинг с 10000 nop подряд