“pi”和“M_PI”在Objective-C中有什么区别?

15

在我的代码中加入一些数学计算时,我遇到了常量"PI"。 在我的Xcode版本4.6中,我可以使用任何一个。但是piM_PI之间有什么区别呢?文档在这个主题上有点紧缩。


1
pi 不是我所包含的 Cocoa 头文件中的标准常量,也不是 PIM_PI 是从 math.h 中的标准定义,对于大多数情况应该足够。 - Ben Zotto
5
"M_PI" 是 POSIX 的专有名词,不是 C 标准的一部分。 - Stephen Canon
@StephenCanon:没错,我的意思是“标准”,就是“大家都使用的那个”。 :) - Ben Zotto
M_PI足以近似计算银河系(甚至整个宇宙)的周长,误差只有几英里,所以我不会为此失眠。 - Laserbeak
1个回答

30

pi 在 "CarbonCore.framework" 的头文件中被定义为

extern const double_t pi  __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_8, __IPHONE_NA, __IPHONE_NA);

但被标记为“已弃用”。我认为这是旧的Carbon框架中的遗物。

M_PI被定义为一个宏。

#define M_PI   3.14159265358979323846264338327950288

math.h中,并作为POSIX标准的一部分。
这些值是相同的,但为了可移植性,应该使用M_PI
(对于Swift,请参见如何在Swift中获取数学常数PI

1
感谢您的回答,哇!不使用pi是好消息(到目前为止我一直使用它)。我能否直接在我的代码中包含M_PI,还是需要#import...一个特殊类? - JFS
2
如果您已经导入了Foundation或CoreFoundation头文件,则可以直接使用它,因为这些文件包含<math.h>。否则,您需要在代码中添加#include <math.h> - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接