Связывание математической библиотеки с кодом C90 с помощью GCC - PullRequest
1 голос
/ 09 сентября 2011

Я хотел бы скомпилировать простой код 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 запрещает использование математической библиотеки?

Ответы [ 2 ]

5 голосов
/ 09 сентября 2011

M_PI не определяется, когда требуется строгий стандарт ISO. Посмотрите на эту страницу под тригонометрическими функциями. Предполагается, что при использовании -ansi просто определите его самостоятельно:

#define M_PI 3.14159265358979323846264338327
2 голосов
/ 09 сентября 2011

M_PI обычно объявляется как макрос, и существует явная защита #if !defined(_ANSI_SOURCE) (по крайней мере, в OSX), которая предполагает, что реализация ANSI не поддерживает его

для gcc, вы также можете использовать -std=c90заставить C90

...