我的构建系统MacOS 10.6.3上用于POSIX数学库的接口是math.h,但是在我的目标系统上,接口文件的名称是cmath.h。在学校我们使用cmath,我想确保我的项目在交付时编译,这是如何实现的。学校的服务器和工作站是运行Windows XP的x86。 GCC可在两个平台上使用。
答案 0 :(得分:19)
在C ++标准中,数学库函数在两个标题中定义:
<cmath>
在名称空间std
中包含它们(例如std::sin
),而
<math.h>
在全局命名空间中包含它们(所以只有sin
)。
两者之间还存在进一步的差异:而<math.h>
包含所有具有不同类型的不同名称的C数学函数,例如
double sin(double);
float sinf(float);
long double sinl(long double);
等,<cmath>
包含重载函数,例如
namespace std {
double sin(double);
float sin(float);
long double sin(long double);
}
等。 (C ++库可能还会从sinf
导出<cmath>
,但您不能在便携式程序中依赖它。)
最后,C标准库中的fabs
,fabsf
和fabsl
函数已成为std::abs
中<cmath>
的重载。
虽然两个标头都在标准中,但您应该更喜欢<cmath>
,因为<math.h>
仅用于向后兼容预标准C ++和C.
标准C ++中没有<cmath.h>
这样的东西。