LINUX.ORG.RU

[C] красивость кода


0

0

Требуются некоторые временные переменные в теле case. Как обычно делают? Так?

switch(var) {
    1:{
          int temp1;
          char temp2;
          ...
          break;
    }
}
Или может лучше использовать if,else if...else? Просто как то некрасиво

#define GOODVARIANT 1
#define SOMEVARIANT 2

switch (variable_i)
   { 
   case GOODVARIANT:
       {      
       int number_i; 
       char * str_ch_p; 
       ... 
       break; 
       };

   case SOMEVARIANT:
       {      
       int number_i; 
       char * str_ch_p; 
       ... 
       break; 
       };

   default:
       {      
       break; 
       };
   };
xcreatepixmap ()

Нормально все. Просто ты заработался. Выйди потяни воздуха.

Andaril ()

>Или может лучше использовать if,else if...else?
НЕ лучше, ибо switch оптимизируется в таблицу переходов, и работает быстрее, чем if else.

Просто как то некрасиво

Должно быть читаемо - остальное от лукавого.

anon_666 ()

Или может лучше использовать if,else if...else?


Если условий больше 2-х, то лучше switch, а так нормально

Boy_from_Jungle ★★★★ ()

а вообще код вида

if (x == 0) f0();
   else if (x == 1) f1();
   else if (x == 2) f2();
   else if (x == 3) f3();
   else if (x == 4) f4();
   else if (x == 5) f5();
должен быть оптимизирован комилятором в
switch (x) {
      case 0: f0(); break;
      case 1: f1(); break;
      case 2: f2(); break;
      case 3: f3(); break;
      case 4: f4(); break;
      case 5: f5(); break;
   }

Boy_from_Jungle ★★★★ ()
Ответ на: комментарий от anon_666

> НЕ лучше, ибо switch оптимизируется в таблицу переходов, и работает быстрее, чем if else.

Самый завалявшийся компилятор должен уметь набор простых if преобразовывать в таблицу переходов. И не всякий switch будет в эту таблицу преобразован.

ntp ()
Ответ на: комментарий от anotheranonymous

> Сишный свитч по-любому преобразуется.

Не говори о том чего не знаешь.

anonymous ()

Все ок, правильно написали - заработался. switch - лучше, так как не проверяется каждое значение (if...elseif...else - это делают). Про кошерность оформления кода - почитай лучше «Программирование на Си» Кернигана и Ричи, там оформлено все, как надо. А так - сам понимаешь свой код, значит правильно оформил

Meerkat ()
Ответ на: комментарий от Nakgidveef

>Если так используется enum с большим разбросом значений, то не преобразуется.

Тогда там будет двоичный поиск.

legolegs ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.