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

Как проверить вычисленную переменную в #if

Как проверить вычисленную переменную в #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акие решениия есть?

Спасибо.

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

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


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

Как проверить вычисленную....

У Вас нет вычисления константы препроцессором вот и весь ответ.

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


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

У Вас нет вычисления КОНСТАНТЫ препроцессором вот и весь ответ.

 

Не уловил, предварительно значение определенно, а дальше фик...

 

Если в define это не получается, то как в функции после проверки переменной тормознуть компиляцию и выдать warning?

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

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


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

В подобных случаях я делаю так:

if (sizeof (struct config) > 512)
{
   void ERROR_config_too_large(void);
   ERROR_config_too_large();
   for (;;)
     ;
}

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

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


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

В подобных случаях я делаю так:

if (sizeof (struct config) > 512)
{
   void ERROR_config_too_large(void);
   ERROR_config_too_large();
   for (;;)
    ;
}

 

Так у меня не структура а одно значение..., но примерно понял

 

Так у меня не структура а одно значение..., но примерно понял

 

Не... с одним значением не понимаю до конца

 

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


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

Просто сравните две константы... Нормальный компилятор выкинет обращение к несуществующей функции при нормальном значении и вывалится с ошибкой на линковке при нарушении условий.

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


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

Kакие решениия есть?

Выражение в #if должно быть вычисляемым препроцессором, а он не знает что такое "unsigned int" и "(F32_t)" и, вероятно, что такое "round()".

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


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

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

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

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

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

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

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

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

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

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