sidy 1 26 октября, 2017 Опубликовано 26 октября, 2017 (изменено) · Жалоба Добрый день. Господа, возник вопрос, использую конструкцию следующего вида: switch(PnominalFact) { case 20: { #define Rdat 27.4f } break; case 80: { #define Rdat 50.0f } break; default: break; } } И соответственно независимо от case Rdat будет 50.0f. Т.е. получается что на директивы условных компиляций условия операторов не распространяются? Изменено 26 октября, 2017 пользователем sidy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sidy 1 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба Препроцессор назван так не случайно. Он корежет исходники до компилятора и на этом успокаивается. Хорошо хоть что такой вопрос в разделе для начинающих... Собственно я только учусь программированию - но в общем тоже догадался. Решил удостовериться тут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба возник вопрос, использую конструкцию следующего вида:Попробуйте словами описать, что вы от нее хотели получить. И соответственно независимо от case Rdat будет 50.0f.Ну, во-первых вы должны были получить кучу предупреждений, что Rdat переопределяется. Во-вторых, до следующего #define Rdat будет иметь значение, заданное в предыдущем. Т.е. получается что на директивы условных компиляций условия операторов не распространяются?Какой-то набор слов. где тут директивы условных компиляций, что такое "условия операторов"? В целом, Kabdim ответил правильно - препроцессор делает простые текстовые подстановки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба Возможно намекается на ЭТО. В кейсах - дублирующийся код с использованием Rdat :) switch(PnominalFact) { case 20: { float Rdat = 27.4f; . . . . . . . } break; case 80: { float Rdat = 50.0f; . . . . . . . } break; default: break; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sidy 1 26 октября, 2017 Опубликовано 26 октября, 2017 · Жалоба Возможно намекается на ЭТО. В кейсах - дублирующийся код с использованием Rdat :) switch(PnominalFact) { case 20: { float Rdat = 27.4f; . . . . . . . } break; case 80: { float Rdat = 50.0f; . . . . . . . } break; default: break; } Именно это я и хотел получить) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 27 октября, 2017 Опубликовано 27 октября, 2017 · Жалоба Именно это я и хотел получить) Оператор case в такой примитивной конструкции прекрасно заменяется if else - и короче и понятнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 27 октября, 2017 Опубликовано 27 октября, 2017 · Жалоба Если MISRA некритична, а кейсов много - проще устроить пробежку циклом по массиву структур. Точно будет понятнее длиннющего switch Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться