c语言 里m_pi的头文件,关于C#:使用C89标准的M_PI

我正在使用C并尝试访问常量M_PI(3.14159 ...)。 我已经导入了math.h头文件,但是M_PI常量仍未定义。 通过对StackOverflow的一些搜索,我发现我需要在代码中添加#define _USE_MATH_DEFINES(请参见下面的示例代码)。 正常编译时,此方法工作正常,但是我需要能够使用std=c89标志进行编译,以完成我正在做的工作。

我应该如何从某些C89代码访问M_PI?

符合标准的库文件math.h不仅不是必需的,而且实际上默认情况下也不能定义M_PI。在这种情况下,"默认"意味着M_PI必须仅通过特定于编译器的技巧来定义,大多数情况下是通过使用保留标识符来定义的行为。

只需自己定义常量(您可以自由使用名称M_PI,但是如果您希望能够使用不合格的编译器来编译代码,则必须首先检查是否尚未定义M_PI)。为方便起见,请勿将M_PI定义为pi的近似值。

@Jason S:这仅是由于标准库实现不允许"污染"名称空间(即,必须仅根据标准使用保留的标识符)这一事实。

是这样吗?这将意味着C实现永远不能同时符合C89和C99,因为C99向该库添加了标识符。

@larsmans:C99小心地添加了为C89中的实现保留的标识符(特别是参见C89中的4.13 FUTURE LIBRARY DIRECTIONS部分)或未在C89中定义的新头文件。但是,在C89和C99之间存在一些库行为不同的特殊情况-例如strtod(),它必须处理C99中的十六进制浮点,而不能在C89中处理。

@FredFoo是正确的;不能同时符合C89和C99。这就是为什么我们有编译器开关来选择一个或另一个。 C89实现可以提供一些C99

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值