简单C程序在OSX上编译,但不包括Fedora16,包括math.h,但未使用

简单C程序在OSX上编译,但不包括Fedora16,包括math.h,但未使用,c,macos,gcc,fedora,autotools,C,Macos,Gcc,Fedora,Autotools,所有代码都可以在这里找到 这似乎是显而易见的,但它不起作用#include存在,但未识别M#PI airC.c: In function ‘x_curved’: airC.c:94:33: error: ‘M_PI’ undeclared (first use in this function) 系统信息 gcc version 4.6.2 20111027 (Red Hat 4.6.2-1) (GCC) Linux fedora-oe 3.2.6-3.fc16.x86_64 我想这只能和自

所有代码都可以在这里找到

这似乎是显而易见的,但它不起作用<代码>#include存在,但未识别M#PI

airC.c: In function ‘x_curved’:
airC.c:94:33: error: ‘M_PI’ undeclared (first use in this function)
系统信息

gcc version 4.6.2 20111027 (Red Hat 4.6.2-1) (GCC)
Linux fedora-oe 3.2.6-3.fc16.x86_64
我想这只能和自动工具有关。请随意批评我的混乱:)

编辑:

反对票和指向无用答案的链接不受欢迎


手册页明确指出M_PI是在/usr/include/math.h中定义的,并且M_PI实际上是在我不理解的#ifdef后面定义的。

M_PI
不是标准C


您必须定义
\u GNU\u SOURCE
才能在Linux上启用它。OSX源于BSD,因此那里的规则可能不同。

这是一个不充分的答案/usr/include/math.h确实有M_-PI和math的手册页。h说“标题应提供以下常量。”之后很快就有M_-PI。你能发布ifdef吗?可能有助于找出为什么找不到它。/*一些有用的常量。*/#如果定义了uuu使用| BSD |定义了uu使用uxo,那么有没有一种合理的方法可以通过简单的多平台方式实现这一点?(最好使用自动工具)是的,在
configure.ac
中测试M_PI。如果找不到,请在定义了
\u GNU\u SOURCE
的情况下重试,如果可以,请将
-D\u GNU\u SOURCE
添加到
CFLAGS
(或您选择的另一个变量)。
\u GNU\u SOURCE
可能是要查找的错误宏,
M\u PI
随POSIX提供,因此您应该从那里使用这些功能。实际上,你通常不需要处理这个问题<代码>\uuuxopen\uSource应该包含系统实现的实际POSIX版本。POSIX的编译器接口被称为
c99
,如果使用它而不是
gcc
触发正确的定义,也许可以尝试一下。我刚刚在Ubuntu上试过:
gcc
没有任何额外的东西就给出
M_PI
gcc-ansi
没有,也没有
gcc-std=c99
,而且
c99
。在所有情况下,定义
\u GNU\u SOURCE
再一次定义了
M\u PI
。可能是
\u XOPEN\u SOURCE
更正确,我不知道。