1

我想使用数学库编译一个简单的 C90 代码:

主.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标准是否禁止使用数学库?

4

2 回答 2

5

当需要严格的 iso 标准时,没有定义 M_PI。在三角函数下查看此页面。建议在使用-ansi的时候,自己定义就好:

#define M_PI 3.14159265358979323846264338327
于 2011-09-09T02:34:31.547 回答
2

M_PI 通常被声明为宏并且有一个明确的保护#if !defined(_ANSI_SOURCE)(至少在 OSX 中),这表明 ANSI 实现不支持它

对于 gcc,您也可以使用-std=c90强制 C90

于 2011-09-09T02:24:35.187 回答