C或C++的<math.h>是什么?

Run*_*ean 6 c++ math logging

我需要自然对数函数用于.cpp(c ++)源文件.现在,我当然可以通过快速谷歌搜索和简单的库解决方案来做到这一点.但我有点困惑......

在cplusplus dot com网站的参考/ cmath/log /下他们有一个如何使用日志功能的例子,如下

/* log example */
#include <stdio.h>      /* printf */
#include <math.h>       /* log */

int main ()
{
   double param, result;
   param = 5.5;
   result = log (param);
   printf ("log(%f) = %f\n", param, result );
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我有一些问题:

1)他们为什么使用

<stdio.h>
Run Code Online (Sandbox Code Playgroud)

我认为这是针对C而不是C++?

2)他们为什么使用

<math.h>
Run Code Online (Sandbox Code Playgroud)

我虽然.h代表C头文件而不是.hpp C++头文件?

忘记使用stdio(无论如何我会使用iostream),但即便如此

<math.h>
Run Code Online (Sandbox Code Playgroud)

感觉就像我在编写C代码而不是C++代码.我通过教学课程学习C++,教师在第一周学习了C,然后说我们不再使用C,但从现在开始将使用C++.如果老师问"你为什么使用C头文件?我应该用C++工作",我觉得自己无法解释自己.

任何解释都非常感激.

Pet*_*ter 11

<math.h>是C标准中指定的标头.它的用法在C++中得到了支持,但是所有C++标准都正式弃用(这意味着大约可以从未来的标准中删除).我建议不要将其从未来的C++标准中删除,因为只要向后兼容C被认为是重要或可取的.

<cmath>是C++标准中指定的标头.它提供与C中基本相同的功能<math.h>,除了名称(除了几个宏之外)驻留在名称空间中std.

类似的故事适用于<stdio.h>(C)和<cstdio>(C++),除了<iostream>在C++中鼓励使用流I/O(例如).

标准C++标头永远不会有.hpp扩展名.标题的命名约定是某些人鼓励的约定,但不是正式要求的.