用-std = c99找不到math.h常量?

Dou*_*ple 3 c gcc compiler-errors

我有简单的测试代码,t.c:

#include <stdio.h>
#include <math.h>

int main(){
  printf("%f\n", M_LN10);
}
Run Code Online (Sandbox Code Playgroud)

在我的一个系统(OS X 10.8.4,GCC 4.8.1)上,编译很好.奇怪的是,在另一个系统(Ubuntu 12.04.2 LTS,GCC 4.6.3)上编译很好gcc t.c,但如果我做了,gcc -std=c99 t.c我得到:

t.c: In function ‘main’:
t.c:5:18: error: ‘M_LN10’ undeclared (first use in this function)
t.c:5:18: note: each undeclared identifier is reported only once 
for each function it appears in
Run Code Online (Sandbox Code Playgroud)

我不明白为什么GCC发现并接受M_LN10math.h使用默认的C-标准没有问题,但如果C99强制执行.知道这里发生了什么吗?

sha*_*net 6

添加-D_BSD_SOURCE或添加-D_XOPEN_SOURCE到GCC命令.就像是gcc -std=c99 -D_XOPEN_SOURCE t.c

查看我系统上的math.h文件后,M_LN10定义如下:

#if defined __USE_BSD || defined __USE_XOPEN
# define M_LN10         2.30258509299404568402  /* log_e 10 */
#endif
Run Code Online (Sandbox Code Playgroud)

  • 请阅读`man feature_test_macros`或`info libc"功能测试宏"`以便能够提供更好的建议.名称以"__"开头的宏非常不打算公开.(`__FILE__`和`__LINE__`是历史异常,然后才能提起它们.) (2认同)