我想用数学库编译一个简单的C90代码:
main.c中:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main()
{
printf("M_PI: %f\n", M_PI);
}
我使用GCC编译器并使用选项-ansi -pedantic来强制执行C90标准。
gcc -ansi -pedantic -lm main.c
但它没有编译。以下是错误消息:
main.c: In function ‘main’:
main.c:7:25: error: ‘M_PI’ undeclared (first use in this function)
main.c:7:25: note: each undeclared identifier is reported only once for each function it appears in
我的问题是,为什么? C90标准是否禁止使用数学库?
答案 0 :(得分:5)
当需要严格的iso标准时,未定义M_PI。在三角函数下的this页面上查看。建议在使用-ansi时,只需自己定义:
#define M_PI 3.14159265358979323846264338327
答案 1 :(得分:2)
M_PI通常被声明为宏,并且有一个显式的保护#if !defined(_ANSI_SOURCE)
(至少在OSX中),这表明ANSI实现不支持它
对于gcc,您也可以使用-std=c90
强制使用C90