如何使用Math.h中的M_LN2

时间:2014-09-04 17:49:04

标签: c constants c99 math.h

我正在尝试使用math.h库中的Constant 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

1 个答案:

答案 0 :(得分:5)

  

任何帮助理解为什么会发生这种情况会有很大帮助   赞赏。

您可以打开/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,因此if define包裹的所有变量也未定义。

您可以在不使用-std=c99选项或使用-std=gnu99选项的情况下编译代码。