Sinf - 它存在于C++

Sinf - Does it exist in C++?

本文关键字:C++ 存在 Sinf      更新时间:2023-10-16

我很想知道sinf函数是否存在于C++中,包括math.h

在Qt Creator中查看我的自动完成时,它似乎没有弹出。这让我想知道,出于某种原因,它是否被取出了。谷歌搜索似乎也没有弹出很多参考资料;他们中的大多数都参考了直C。

那么,这能得到证实吗?

这取决于您的实现支持的标准版本。

1990 ISO C 标准中不存在sinf功能(sind 中也不存在(。 唯一sin函数是 sin ,它接受一个double参数并返回一个double结果。 ("未来图书馆方向"部分,7.13,确实说名称后缀为fl的数学函数是保留的。

sinfsind功能在1999年ISO C标准(C99(中添加。

2003 年版的 ISO C++ 标准在第 17.4.1.2 节 [lib.headers] 中说:

除第 18 至 27 条所述外,每个标题的内容 cname 应与相应的标头名称相同。 在 ISO/IEC 9899:1990 编程语言 C(第 7 条(中指定,或 ISO/IEC:1990 编程语言—C 修订 1:C 完整性,(条款 7(,视情况而定,仿佛通过包容。

2011 ISO C++标准(至少是 N3290 草案(包括以下内容作为规范性参考:

  • ISO/IEC 9899:1999, 编程语言 — C
  • ISO/IEC 9899:1999/Cor.1:2001(E(,编程语言——C,技术勘误表1
  • ISO/IEC 9899:1999/Cor.2:2004(E(,编程语言——C,技术勘误表2
  • ISO/IEC 9899:1999/Cor.3:2007(E(,编程语言 — C,技术勘误表 3

因此,符合 C++11 不需要提供sinf的更早标准的C++实现。 目前尚不清楚是否允许这样做,但由于 C++11 之前的所有标准都正式过时,这可能是一个有争议的问题。

对于 C++11 之前的实现来说,提供sinf()和朋友作为(可能不符合(扩展可能是很常见的。

实际上,你总是可以只调用sin();在大多数情况下,参数和结果将从float隐式转换为double,从double转换为float。 可能会(或可能不会(有一些效率损失。

所有 C 函数都存在于 C++ 中,除非它们的头文件采取显式步骤检查它是否是 C++ 编译器并在这种情况下隐藏定义。

所以是的,你可以像使用 C 一样使用 C++ 代码中的sinf。事实上,你可以(除了一些非常狭窄的例外(编写 C90 代码并通过 g++ ,称之为C++。

编辑:sinf,至少在我的机器上,除非在包含该标头之前#define以下之一,否则math.h不会公开:

_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600
|| _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

因此,在C++代码中,您可能需要设置其中一个预处理器定义才能获得原型。