无法使用 -std=c99 找到 math.h 常量?

标签 c gcc compiler-errors

我有简单的测试代码,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/

相关文章:

java - 在操作监听器中找不到符号错误

c - 是否可以从子线程获取父线程ID?

C:如何摆脱转换错误?

c++ - 循环内是否有常量函数返回值的优化?

c++ - 在 gcc 中将目录的包含顺序设置为最后

java - 如何使用-cp在Unix上编译Java

swift - 参数类型 '()'与预期的 'View'类型不一致SwiftUI吗?

c - 将旧的 'C' 库从 32 位移植到 64 位时出现文件 I/O 问题

在C中复制可执行文件

c - 使用共享内存时如何处理被杀(kill -9)?