Препроцессор "неверное целочисленное константное выражение", сравнивающий int с double - PullRequest
6 голосов
/ 15 мая 2019

Где-то в моем коде есть определение препроцессора

#define ZOOM_FACTOR 1

В другом месте у меня

#ifdef ZOOM_FACTOR
#if (ZOOM_FACTOR == 1)
#define FONT_SIZE 8
#else
#define FONT_SIZE 12
#endif
#else
#define FONT_SIZE 8
#endif

Проблема в том, что когда я изменяю значение ZOOM_FACTOR на значение floating point, например, 1.5, я получаю ошибку компиляции C1017: invalid integer constant expression.

Кто-нибудь знает, почему я получаю эту ошибку, и есть ли способ сравнить integer и floating point number в директиве препроцессора?

1 Ответ

4 голосов
/ 15 мая 2019

Ошибка в том, что язык не позволяет этого.

Согласно стандарту C ++, [cpp.cond]/1:

Выражение, управляющее условным включением, должно быть целочисленным константным выражением.

Вместо определения ZOOM_FACTOR в качестве значения с плавающей запятой 1.5, почему бы не определить его как кратное этому значению.Например, умножьте на константу, такую ​​как 2, а затем проведите сравнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...