我有简单的测试代码t.c
:
#include <stdio.h>
#include <math.h>
int main(){
printf("%f\n", M_LN10);
}
在我的一个系统(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
我认为GCC没有理由在M_LN10
中找到并接受math.h
对默认C标准没有问题,但是如果强制执行C99则没有。知道这里发生了什么吗?
答案 0 :(得分: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