c - 如何使用 Math.h 中的 M_LN2

标签 c constants c99 math.h

我正在尝试使用 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/

相关文章:

c - C中 `inline`关键字有什么用?

c - (这里是极端菜鸟)为什么这个 C 代码不能工作?

ruby-on-rails - 你如何在 Rails 4 中存储自定义常量?

c# - 跨语言共享常量

c - 为什么预定义宏 __STDC_VERSION__ 未定义?

c - 如何使用但不公开 c99 库中的内联函数?

c - 将随机数排序到容器中 - C

c++ - TCMalloc - 获取指针的分配大小

c - openssl 获取证书扩展

c++ - 涉及 const_cast 的意外行为