web-dev-qa-db-fra.com

L'utilisation de la fonction pow () génère une erreur de référence non définie dans C

Pourquoi le bit de code suivant fonctionne-t-il en C:

int res = pow(2, 3);
printf("%d\n", res);

alors que cet autre ne fonctionne pas?

int a = 2;
int b = 3;

int res = pow(a, b);
printf("%d\n", res);

Même si j'essaie

double a = 2;
double b = 3;

double res = pow(a, b);
printf("%f\n", res);

Je reçois un

référence indéfinie à "pow"

Qu'est-ce que je fais mal?

33
devoured elysium

Quand cela fonctionne, c'est parce que le calcul a été fait par le compilateur lui-même (et inclus dans le binaire comme si vous l'aviez écrit)

printf("8\n");

Quand cela ne fonctionne pas, c'est parce que la fonction pow est incluse dans la bibliothèque mathématique et que la bibliothèque mathématique n'est pas liée à votre binaire par défaut.
Pour obtenir la bibliothèque mathématique à lier, si votre compilateur est gcc, utilisez

gcc ... -lm ...

Avec les autres compilateurs, devrait être le même :)
mais lisez la documentation

54
pmg

undefined reference to 'pow' sonne comme une erreur de l'éditeur de liens. Vous ne liez pas dans la bibliothèque mathématique, même si vous introduisez la fonction pow en incluant <math.h>.

Avec gcc, utilisez le -lm paramètre de ligne de commande à lier dans la bibliothèque mathématique.

17
eq-

Utilisez comme ça

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

int main(void)
{
  for(int i = 1; i < 5; i++)
     printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));  
  return 0;
}

Production:

pow (3.2, 1) = 3.200000

2
Karthik Ratnam