Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование #define в switch case
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
sidy
Добрый день. Господа, возник вопрос, использую конструкцию следующего вида:
switch(PnominalFact)
{
case 20:
{
#define Rdat 27.4f
}
break;
case 80:
{
#define Rdat 50.0f
}
break;
default: break;
}
}
И соответственно независимо от case Rdat будет 50.0f. Т.е. получается что на директивы условных компиляций условия операторов не распространяются?
Kabdim
Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих...
sidy
Цитата(Kabdim @ Oct 26 2017, 16:34) *
Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих...

Собственно я только учусь программированию - но в общем тоже догадался. Решил удостовериться тут.
Сергей Борщ
QUOTE (sidy @ Oct 26 2017, 16:17) *
возник вопрос, использую конструкцию следующего вида:
Попробуйте словами описать, что вы от нее хотели получить.
QUOTE (sidy @ Oct 26 2017, 16:17) *
И соответственно независимо от case Rdat будет 50.0f.
Ну, во-первых вы должны были получить кучу предупреждений, что Rdat переопределяется. Во-вторых, до следующего #define Rdat будет иметь значение, заданное в предыдущем.
QUOTE (sidy @ Oct 26 2017, 16:17) *
Т.е. получается что на директивы условных компиляций условия операторов не распространяются?
Какой-то набор слов. где тут директивы условных компиляций, что такое "условия операторов"?

В целом, Kabdim ответил правильно - препроцессор делает простые текстовые подстановки.
k155la3
Возможно намекается на ЭТО. В кейсах - дублирующийся код с использованием Rdat sm.gif
Код
switch(PnominalFact)
{
  case 20:
  {
      float Rdat = 27.4f;
      . . . . . . .
  }
  break;
  case 80:
  {
      float Rdat = 50.0f;
      . . . . . . .
  }
  break;
  default: break;
}
sidy
Цитата(k155la3 @ Oct 26 2017, 17:41) *
Возможно намекается на ЭТО. В кейсах - дублирующийся код с использованием Rdat sm.gif
Код
switch(PnominalFact)
{
  case 20:
  {
      float Rdat = 27.4f;
      . . . . . . .
  }
  break;
  case 80:
  {
      float Rdat = 50.0f;
      . . . . . . .
  }
  break;
  default: break;
}

Именно это я и хотел получить)
Forger
Цитата(sidy @ Oct 26 2017, 17:48) *
Именно это я и хотел получить)

Оператор case в такой примитивной конструкции прекрасно заменяется if else - и короче и понятнее.
gosha-z
Если MISRA некритична, а кейсов много - проще устроить пробежку циклом по массиву структур. Точно будет понятнее длиннющего switch
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.