-=az=- 0 12 июня, 2016 Опубликовано 12 июня, 2016 (изменено) · Жалоба Как проверить вычисленную переменную в #if c целью вывода #warning Например: #define X round((F32_t)11.2) #if (unsigned int)X>10 #warning X больше 10 #endif Ошибки: Error[Pe059]: function call is not allowed in a constant expression Error[Pe031]: expression must have integral type Kакие решениия есть? Спасибо. Изменено 12 июня, 2016 пользователем phenixs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 12 июня, 2016 Опубликовано 12 июня, 2016 · Жалоба Как проверить вычисленную.... У Вас нет вычисления константы препроцессором вот и весь ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 12 июня, 2016 Опубликовано 12 июня, 2016 (изменено) · Жалоба У Вас нет вычисления КОНСТАНТЫ препроцессором вот и весь ответ. Не уловил, предварительно значение определенно, а дальше фик... Если в define это не получается, то как в функции после проверки переменной тормознуть компиляцию и выдать warning? Изменено 12 июня, 2016 пользователем phenixs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 12 июня, 2016 Опубликовано 12 июня, 2016 (изменено) · Жалоба В подобных случаях я делаю так: if (sizeof (struct config) > 512) { void ERROR_config_too_large(void); ERROR_config_too_large(); for (;;) ; } Изменено 12 июня, 2016 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vladivolt 0 12 июня, 2016 Опубликовано 12 июня, 2016 · Жалоба http://electronix.ru/forum/index.php?showtopic=80886&hl= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 12 июня, 2016 Опубликовано 12 июня, 2016 · Жалоба В подобных случаях я делаю так: if (sizeof (struct config) > 512) { void ERROR_config_too_large(void); ERROR_config_too_large(); for (;;) ; } Так у меня не структура а одно значение..., но примерно понял Так у меня не структура а одно значение..., но примерно понял Не... с одним значением не понимаю до конца Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 12 июня, 2016 Опубликовано 12 июня, 2016 · Жалоба Просто сравните две константы... Нормальный компилятор выкинет обращение к несуществующей функции при нормальном значении и вывалится с ошибкой на линковке при нарушении условий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 12 июня, 2016 Опубликовано 12 июня, 2016 · Жалоба А static_assert не подходит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 12 июня, 2016 Опубликовано 12 июня, 2016 · Жалоба А static_assert не подходит? никак её не приделаю к одному значению... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 12 июня, 2016 Опубликовано 12 июня, 2016 · Жалоба Kакие решениия есть? Выражение в #if должно быть вычисляемым препроцессором, а он не знает что такое "unsigned int" и "(F32_t)" и, вероятно, что такое "round()". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться