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?
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
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.
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