【问题标题】:Math interface vs cMath in C++数学接口与 C++ 中的 cMath
【发布时间】:2012-02-02 18:56:21
【问题描述】:

我的构建系统 MacOS 10.6.3 上用于 POSIX 数学库的接口是 math.h,但在我的目标系统上,接口文件的名称是 cmath.h。在学校我们使用 cmath,我想确保我的项目在提交时可以编译,这是如何实现的。学校的服务器和工作站是运行 Windows XP 的 x86。 GCC 在两个平台上都可用。

【问题讨论】:

  • 你的“目标系统”是什么。什么编译器,什么操作系统??问你的老师cmath.hmath.h之间的区别?是<cmath> 还是<cmath.h>
  • 对不起,我的意思是 macos 是我的主机系统,windows XP 是我的目标系统。如果我的教授知道答案,那我就不用在这里问了。

标签: c++ gcc cmath


【解决方案1】:

在 C++ 标准中,数学库函数在两个头文件中定义:

<cmath>

将它们包含在命名空间std(例如std::sin)中,而

<math.h>

将它们包含在全局命名空间中(所以只需 sin)。

两者之间还有进一步的区别:&lt;math.h&gt; 包含所有 C 数学函数,具有不同类型的不同名称,例如

double sin(double);
float sinf(float);
long double sinl(long double);

等等,&lt;cmath&gt;包含重载函数如

namespace std {
    double sin(double);
    float sin(float);
    long double sin(long double);
}

等等。 (C++ 库可能还会从 &lt;cmath&gt; 导出 sinf,但在可移植程序中您不能依赖它。)

最后,来自 C 标准库的 fabsfabsffabsl 函数已成为 std::abs&lt;cmath&gt; 的重载。

虽然这两个标头都在标准中,但您应该更喜欢 &lt;cmath&gt;,因为 &lt;math.h&gt; 只是为了向后兼容标准前的 C++ 和 C。

在标准 C++ 中没有 &lt;cmath.h&gt; 这样的东西。

【讨论】:

  • 好的。删除了我的答案而不是对其进行编辑,因为您已经在这里介绍了重要的部分。我认为值得一提的是其他标准库使用 命名风格,但我会留给你。
  • @HarperShelby:把它放在最后。我希望 OP 能读到这么远,因为这是一个相当多的列表;)
  • 我们的目标是在那里获得好的信息——你可以把马牵到水边等等。
  • 好的,所以在 C++ 头文件名中应该指定不带 .h 的名称,这在理论上是我无法链接 cmath 的原因,但 cmath 上没有联机帮助页(至少在我的系统),所以我不知道它是否正确安装并且我的笔记本电脑刚刚死机,所以我稍后再检查一下,看看它是否仍然是一个问题。
  • @awiebe:我从未见过在 C++ 库上有手册页的系统。手册页往往只涵盖 C 库。
猜你喜欢
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
相关资源
最近更新 更多