我有简单的测试代码,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 在 math.h
中找到并接受 M_LN10
对默认的 C 标准没有问题,但如果强制执行 C99 则不会。知道这里发生了什么吗?
最佳答案
将 -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
关于无法使用 -std=c99 找到 math.h 常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18908600/