作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 math.h 库中的常量 M_LN2,但似乎总是出现编译器错误。代码是:
#include <stdio.h>
#include <math.h>
int main(){
double x = M_LN2;
printf("%e",x);
return 0;
}
在ubuntu上用gcc编译
gcc -std=c99 lntester.c -o lntester -lm
获取输出:
error: 'M_LN2' undeclared
如果能帮助理解为什么会发生这种情况,我们将不胜感激。
如下所述,if def 没有得到定义,使用 gcc 和 c99 导致了这个问题。下面是解决问题并允许我使用 c99 的编译代码。
gcc -std=c99 -D_GNU_SOURCE lntested.c -o lntester -lm
最佳答案
any help in understanding why this is happening would be greatly appreciated.
您可以打开/usr/include/math.h
并尝试找到M_LN2
的定义。对我来说,它是由条件宏定义和包装的:
#if defined __USE_BSD || defined __USE_XOPEN
...
# define M_LN2 0.69314718055994530942 /* log_e 2 */
...
#endif
当您使用选项编译代码时 -std=c99
既没有定义 __USE_BSD
也没有定义 __USE_XOPEN
,所以所有由 包装的变量如果定义
也没有定义。
您可以在不使用 -std=c99
选项或使用 -std=gnu99
选项的情况下编译您的代码。
关于c - 如何使用 Math.h 中的 M_LN2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25671935/
我是一名优秀的程序员,十分优秀!