2011-09-09 2 views
1

Je voudrais compiler un simple code de C90 en utilisant la bibliothèque de mathématiques:bibliothèque Linking Math à un code de C90 en utilisant GCC

main.c:

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    printf("M_PI: %f\n", M_PI); 
} 

J'utilise le compilateur GCC et utilisez l'option - ansi -pedantic pour appliquer la norme C90.

gcc -ansi -pedantic -lm main.c 

Mais il ne compile pas. Ce qui suit est le message d'erreur:

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 

Ma question est, pourquoi? La norme C90 interdit-elle l'utilisation de la bibliothèque de mathématiques?

Répondre

5

M_PI n'est pas défini lorsqu'une norme iso stricte est requise. Regardez sur la page this sous les fonctions trigonométriques. Il est suggéré que lorsque vous utilisez -ansi, définissez-le vous-même:

#define M_PI 3.14159265358979323846264338327 
2

M_PI est généralement déclarée comme une macro et il y a une garde explicite #if !defined(_ANSI_SOURCE) (au moins dans Mac OS X), ce qui suggère que la mise en œuvre ANSI ne marche pas le soutenir

pour gcc, vous pouvez également utiliser -std=c90 pour forcer C90

Questions connexes