如何使用 GCC 4.3 在 -std=gnu++98 模式下使用 C99 数学函数?
How to make C99 math functions available in -std=gnu++98 mode with GCC 4.3?
我想在我的 C++ 代码中使用 isfinite
函数。
此功能在默认 math.h
中可用,但在 cmath
.
的默认版本(-std=gnu++98) 中不可用
因此,如果我包含 math.h
并确保不包含 cmath
,则 isfinite
可用。
如果任何其他头文件,如 valarray
包含 cmath
,则 isfinite
不存在。
GCC 4.3 中的 C++11 是实验性的,所以我不想打开它。
有没有办法在 C++98 代码中使用 C99 math.h
?
我找到了 this related question on testing NaN,非 C++11 的解决方案看起来很丑。
编辑
正如评论中@old_mountain所指出的,当使用cmath
时,isfinite
仍然可用,但需要被std::isfinite
调用,使用std
命名空间。
包含 <cmath>
并将 std::isfinite
与 std
命名空间一起使用。
自己创建函数!根据 cppreference 该函数作为 C++11 标准的一部分可用,所以我不确定使用 std::isfinite
和 GCC 4 是否可移植。3.X
isfinite.cpp
#include <math.h>
bool myIsFinite(float arg){
return isfinite(arg)!=0;
}
bool myIsFinite(double arg){
return isfinite(arg)!=0;
}
isfinite.hpp
bool myIsFinite(float arg);
bool myIsFinite(double arg);
如果你还想调用一个叫做"isfinite"的函数(我不建议这样做):
isfinite.cpp
bool myIsFinite(float arg);
bool myIsFinite(double arg);
bool isfinite(float arg){
return myIsFinite(arg);
}
bool isfinite(double arg){
return myIsFinite(arg);
}
#include <math.h>
bool myIsFinite(float arg){
return isfinite(arg)!=0;
}
bool myIsFinite(double arg){
return isfinite(arg)!=0;
}
isfinite.hpp
bool isfinite(float arg);
bool isfinite(double arg);
警告
您将无法使用此文件执行 "single translation unit" 之类的操作。所以你必须从任何一个编译单元中排除 "isfinite.cpp" 并单独编译它。
我想在我的 C++ 代码中使用 isfinite
函数。
此功能在默认 math.h
中可用,但在 cmath
.
因此,如果我包含 math.h
并确保不包含 cmath
,则 isfinite
可用。
如果任何其他头文件,如 valarray
包含 cmath
,则 isfinite
不存在。
GCC 4.3 中的 C++11 是实验性的,所以我不想打开它。
有没有办法在 C++98 代码中使用 C99 math.h
?
我找到了 this related question on testing NaN,非 C++11 的解决方案看起来很丑。
编辑
正如评论中@old_mountain所指出的,当使用cmath
时,isfinite
仍然可用,但需要被std::isfinite
调用,使用std
命名空间。
包含 <cmath>
并将 std::isfinite
与 std
命名空间一起使用。
自己创建函数!根据 cppreference 该函数作为 C++11 标准的一部分可用,所以我不确定使用 std::isfinite
和 GCC 4 是否可移植。3.X
isfinite.cpp
#include <math.h>
bool myIsFinite(float arg){
return isfinite(arg)!=0;
}
bool myIsFinite(double arg){
return isfinite(arg)!=0;
}
isfinite.hpp
bool myIsFinite(float arg);
bool myIsFinite(double arg);
如果你还想调用一个叫做"isfinite"的函数(我不建议这样做):
isfinite.cpp
bool myIsFinite(float arg);
bool myIsFinite(double arg);
bool isfinite(float arg){
return myIsFinite(arg);
}
bool isfinite(double arg){
return myIsFinite(arg);
}
#include <math.h>
bool myIsFinite(float arg){
return isfinite(arg)!=0;
}
bool myIsFinite(double arg){
return isfinite(arg)!=0;
}
isfinite.hpp
bool isfinite(float arg);
bool isfinite(double arg);
警告
您将无法使用此文件执行 "single translation unit" 之类的操作。所以你必须从任何一个编译单元中排除 "isfinite.cpp" 并单独编译它。