2012-10-24 1 views
0

Possible en double:
pow() isn’t definedréférence non définie à ac construit en 'prisonnier de guerre' fonction

void octal2decimal(char *octal, char *decimal) { 
int oct = atoi(octal); 
int dec = 0; 
int p = 0; 

while (oct!=0) { 

    dec = dec + (oct%10) * pow(8,p++); //since oct is base 8 
    oct/=10; 
} 
*decimal = (char)dec; 
*/ 
} 

Pour le code suivant ci-dessus je suis cette erreur, je ne sais pas pourquoi j'inclure math.h mais encore je reçois ces erreurs

/tmp/cck07bLe.o: In function 'octal2decimal':
data-converter.c:(.text+0x35f): undefined reference to 'pow'
collect2: ld returned 1 exit status

Qu'est-ce que cela signifie? et comment puis-je le réparer?

+0

Quelle commande utilisez-vous pour compiler votre code? – Mike

Répondre

1

pow est défini dans la bibliothèque mathématique (libm), qui n'est pas liée par défaut. Ainsi, vous devez ajouter -lm à votre commande de compilation pour obtenir la bibliothèque mathématique. Par exemple, si vous utilisez gcc:

gcc data-converter.c -o data-converter -lm 

Par ailleurs, pow n'est pas la bonne façon de calculer une puissance entière de deux. Vous devriez plutôt utiliser un changement:

dec += (oct%10) << (3*p++); 
oct /= 10; 

Shifting gauche par 3*p équivaut à multiplier par 8 p, mais Evite nombres à virgule flottante.

+0

comment je fais ça? – Nabmeister

+0

@Nabmeister: voir ma modification. – nneonneo

5

La bibliothèque mathématique ne fait pas partie de la bibliothèque C standard qui est incluse par défaut. Lien avec la bibliothèque de maths:

gcc file.c -o file -lm