Макрос isnan
был добавлен в C99.В C ++ 11 он был добавлен как функция в пространство имен std
, перегружено для float
и double
и long double
(поэтому типичный заголовок <cmath>
, такой как ваш не-NDK GCC, вероятно, использует, может иметь что-то вроде этого:
#undef isnan
inline bool isnan(float ...) { ... }
inline bool isnan(double ...) { ... }
inline bool isnan(long double ...) { ... }
), но, очевидно, NDK не получил памятку и по-прежнему предоставляет макрос C99 для удобства.(isnan
никогда не был макросом в C ++, но до того, как TR1 добавил std::tr1::isnan
, альтернативы C ++ на самом деле не было, поэтому несколько компиляторов C ++ предоставили макрос C99.)
Вам нужно уметьиспользовать предоставленный компилятором isnan
или std::isnan
?Если нет, то вы можете просто изменить это:
#include <cmath>
на это:
#include <cmath>
#undef isnan
(и аналогично для любых других проблемных макросов, если они вам не нужны).