HUGE_VALF Не определено в Windows - PullRequest
       0

HUGE_VALF Не определено в Windows

1 голос
/ 19 сентября 2011

Я пытаюсь скомпилировать кодовую базу, изначально предназначенную для платформ Linux / Unix под Windows. Код использует переменную HUGE_VALF, по-видимому, без ссылки на заголовок, который ее определит. Компилятор MS VC9, который я использую на Windows, выдает:

ошибка C2065: 'HUGE_VALF': необъявленный идентификатор.

Каков рекомендуемый включаемый файл или способ определения HUGE_VALF для Windows? Math.h определяет HUGE_VAL (двойник), но не HUGE_VALF (как число с плавающей запятой).

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

Как насчет просто заменить HUGE_VAL* на *_MAX примерно так:

HUGE_VAL  => DOUBLE_MAX
HUGE_VALF => FLOAT_MAX
etc...

Вы можете определить их только для _WIN32 или просто заменить материал HUGE_VAL* на соответствующую стандартную замену.

РЕДАКТИРОВАТЬ: MinGW-w64 (GCC) имеет эти определения, вероятно, это вещи C99 или C ++ 0x, которых нет (пока) в MSVC9. Возможно, в MSVC10 они есть, хотя в msdn, похоже, отсутствует какая-либо информация об определениях.

3 голосов
/ 19 сентября 2011

В большинстве реализаций HUGE_VALF определяется как +Infinity, но на самом деле требуется только "большое положительное значение" . Разумная реализация:

#if defined(_WIN32) && !defined(HUGE_VALF)
# if defined(__cplusplus)
static float _X_huge_valf = std::numeric_limits<float>::infinity();
#  define HUGE_VALF _X_huge_valf
# else
/* assumes Windows on a LE IEEE754 platform */
static union { unsigned int x; float y; } _X_huge_valf = { 0x7f800000 };
#  define HUGE_VALF (_X_huge_valf.y)
# endif /* __cplusplus */
#endif /* defined(WIN32) && !defined(HUGE_VALF) */

(Вы найдете много других странностей, подобных этой, поэтому я предлагаю вам создать заголовок shim для специфических проблем VC.)

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