Перейти к содержанию
    

Использование #define в switch case

Добрый день. Господа, возник вопрос, использую конструкцию следующего вида:

switch(PnominalFact)

{

case 20:

{

#define Rdat 27.4f

}

break;

case 80:

{

#define Rdat 50.0f

}

break;

default: break;

}

}

И соответственно независимо от case Rdat будет 50.0f. Т.е. получается что на директивы условных компиляций условия операторов не распространяются?

Изменено пользователем sidy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих...

Собственно я только учусь программированию - но в общем тоже догадался. Решил удостовериться тут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

возник вопрос, использую конструкцию следующего вида:
Попробуйте словами описать, что вы от нее хотели получить.

И соответственно независимо от case Rdat будет 50.0f.
Ну, во-первых вы должны были получить кучу предупреждений, что Rdat переопределяется. Во-вторых, до следующего #define Rdat будет иметь значение, заданное в предыдущем.

Т.е. получается что на директивы условных компиляций условия операторов не распространяются?
Какой-то набор слов. где тут директивы условных компиляций, что такое "условия операторов"?

 

В целом, Kabdim ответил правильно - препроцессор делает простые текстовые подстановки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно намекается на ЭТО. В кейсах - дублирующийся код с использованием Rdat :)

switch(PnominalFact)
{
  case 20:
  {
      float Rdat = 27.4f;
      . . . . . . .
  }
  break;
  case 80:
  {
      float Rdat = 50.0f;
      . . . . . . .
  }
  break;
  default: break;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно намекается на ЭТО. В кейсах - дублирующийся код с использованием Rdat :)

switch(PnominalFact)
{
  case 20:
  {
      float Rdat = 27.4f;
      . . . . . . .
  }
  break;
  case 80:
  {
      float Rdat = 50.0f;
      . . . . . . .
  }
  break;
  default: break;
}

Именно это я и хотел получить)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно это я и хотел получить)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если MISRA некритична, а кейсов много - проще устроить пробежку циклом по массиву структур. Точно будет понятнее длиннющего switch

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...