CSn*_*ewb 3 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;
}
Run Code Online (Sandbox Code Playgroud)
在ubuntu上用gcc编译
gcc -std=c99 lntester.c -o lntester -lm
Run Code Online (Sandbox Code Playgroud)
获得输出:
error: 'M_LN2' undeclared
Run Code Online (Sandbox Code Playgroud)
任何帮助理解为什么会发生这种情况将不胜感激.
如下所述,if def未定义,使用gcc和c99导致问题.下面是解决问题的编译代码,允许我使用c99.
gcc -std=c99 -D_GNU_SOURCE lntested.c -o lntester -lm
Run Code Online (Sandbox Code Playgroud)
任何帮助理解为什么会发生这种情况将不胜感激.
您可以打开/usr/include/math.h并尝试找到定义M_LN2.对我来说,它是由条件宏定义和包装的:
#if defined __USE_BSD || defined __USE_XOPEN
...
# define M_LN2 0.69314718055994530942 /* log_e 2 */
...
#endif
Run Code Online (Sandbox Code Playgroud)
当您使用选项编译代码时-std=c99既__USE_BSD没有__USE_XOPEN定义,也没有定义包装的所有变量if define.
您可以在不使用-std=c99选项或使用-std=gnu99选项的情况下编译代码.
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |