реклама на сайте
подробности

 
 
> Использование #define в switch case
sidy
сообщение Oct 26 2017, 13:17
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Добрый день. Господа, возник вопрос, использую конструкцию следующего вида:
switch(PnominalFact)
{
case 20:
{
#define Rdat 27.4f
}
break;
case 80:
{
#define Rdat 50.0f
}
break;
default: break;
}
}
И соответственно независимо от case Rdat будет 50.0f. Т.е. получается что на директивы условных компиляций условия операторов не распространяются?

Сообщение отредактировал sidy - Oct 26 2017, 13:18
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Kabdim
сообщение Oct 26 2017, 13:34
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих...
Go to the top of the page
 
+Quote Post
sidy
сообщение Oct 26 2017, 13:47
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Цитата(Kabdim @ Oct 26 2017, 16:34) *
Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих...

Собственно я только учусь программированию - но в общем тоже догадался. Решил удостовериться тут.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 26 2017, 13:48
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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 ответил правильно - препроцессор делает простые текстовые подстановки.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 26 2017, 14:41
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Возможно намекается на ЭТО. В кейсах - дублирующийся код с использованием Rdat sm.gif
Код
switch(PnominalFact)
{
  case 20:
  {
      float Rdat = 27.4f;
      . . . . . . .
  }
  break;
  case 80:
  {
      float Rdat = 50.0f;
      . . . . . . .
  }
  break;
  default: break;
}
Go to the top of the page
 
+Quote Post
sidy
сообщение Oct 26 2017, 14:48
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Цитата(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;
}

Именно это я и хотел получить)
Go to the top of the page
 
+Quote Post
Forger
сообщение Oct 27 2017, 11:28
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



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

Оператор case в такой примитивной конструкции прекрасно заменяется if else - и короче и понятнее.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
gosha-z
сообщение Oct 27 2017, 20:42
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 30-10-05
Пользователь №: 10 288



Если MISRA некритична, а кейсов много - проще устроить пробежку циклом по массиву структур. Точно будет понятнее длиннющего switch
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01425 секунд с 7
ELECTRONIX ©2004-2016