[C] funzione pow() [Risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

[C] funzione pow() [Risolto]

Messaggio da Vito »

Codice: Seleziona tutto


#include <stdio.h>
#include <math.h>
#define DIM 2

int main(){
 
  int a=0;
  int i=0;
  int c[DIM];
  printf("inserisci numero da convertire:");
  scanf("%d",&a);
  printf("numero inserito: %d\n",a);
  for(i=0;i<DIM;i++){
    
    c[i]=a*pow(10,i-DIM+1);
    c[i]=c[i]%10;
    printf("%d\n",c[i]);
    c[i]=c[i]+48;
  }
  
  printf("%d,%d\n",c[1],c[0]);
  return 0; 
  
}


ricevo il seguente errore: "undefined reference to `pow' ".
Da cosa può dipendere!?

il prototipo della funzione è : double pow(double x, double y).
Ho provato a fare un casting a double,ma nulla.
È come se la funzione pow non accettasse come argomento una variabile.
Ho provato a scrivere il tutto in C++ e non ho avuto errori.

EDIT : Il problema è presente solo quando compilo con GCC(4.5.2 multilib), ho provato ad utilizzare un altro compilatore (MinGW) e non ho avuto nessun problema.
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [C] funzione pow()

Messaggio da targzeta »

Devi copilare linkandolo con qualche libreria matematica. Prova con:

Codice: Seleziona tutto

-lImath
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: [C] funzione pow()

Messaggio da 414N »

spina ha scritto:Devi copilare linkandolo con qualche libreria matematica. Prova con:

Codice: Seleziona tutto

-lImath
Emanuele
Credo che il flag corretto da aggiungere a gcc sia -lm

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [C] funzione pow()

Messaggio da targzeta »

414N ha scritto:
spina ha scritto:Devi copilare linkandolo con qualche libreria matematica. Prova con:

Codice: Seleziona tutto

-lImath
Emanuele
Credo che il flag corretto da aggiungere a gcc sia -lm
Boh, dipende da cosa si intende per "corretto", con Imath funziona lo stesso. Comunque anche io stavo pensando (e suggerisco) '-lm' poi, non ricordando il nome preciso ho fatto un 'ls *math*' tra le libreria e ho trovato quella :lol:.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: [C] funzione pow()

Messaggio da Vito »

Grazie mille!
Adesso compila.
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: [C] funzione pow()

Messaggio da 414N »

Vito ha scritto:Grazie mille!
Adesso compila.
In realtà non era la compilazione a fallire, ma il linking per creare l'eseguibile finale, volendo proprio essere pignoli ;)

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: [C] funzione pow()

Messaggio da Vito »

414N ha scritto:
Vito ha scritto:Grazie mille!
Adesso compila.
In realtà non era la compilazione a fallire, ma il linking per creare l'eseguibile finale, volendo proprio essere pignoli ;)
:thumbright:
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: [C] funzione pow() [Risolto]

Messaggio da Vito »

Ho un'ulteriore domanda:

Codice: Seleziona tutto

[vito@Freedom:int2string]$ gcc -lm -o int2string int2string.c
in questo caso non mi ritrovo nessun fil oggetto.

Mentre invece se utilizzo un ambiente (dove per ogni progetto mi crea un makefile) "giustamente" mi ritrovo il file oggetto:

Codice: Seleziona tutto

make all 
Building file: ../int2string.c
Invoking: GCC C Compiler
gcc  -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"int2string.d" -MT"int2string.d" -o "int2string.o" "../int2string.c"
Finished building: ../int2string.c
 
Building target: int2string
Invoking: GCC C Linker
gcc -lm -o "int2string"  ./int2string.o   
Finished building target: int2string

Nel primo caso la creazione del file oggetto avviene "implicitamente",mentre nel secondo caso separo "esplicitamente" la fase di compilazione dalla fase di linking,ecco perchè l'opzione "-lm" la passo quando invoco il linker,giusto?
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: [C] funzione pow() [Risolto]

Messaggio da targzeta »

Guarda i parametri passati dall'ambiente di creazione al gcc. Il parametro '-c' in particolare.

Emanuele

:edit: nota che il makefile fa due passaggi. Prima crea il file oggetto con '-c' e poi esegue il linking. Guarda il man di gcc.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Vito
Staff
Staff
Messaggi: 4182
Iscritto il: mar 5 dic 2006, 17:28
Nome Cognome: Vito
Desktop: MacOS
Località: Monaco (DE)
Contatta:

Re: [C] funzione pow() [Risolto]

Messaggio da Vito »

spina ha scritto:Guarda i parametri passati dall'ambiente di creazione al gcc. Il parametro '-c' in particolare.

Emanuele
-c : compila senza linkare :thumbright:
Grazie mille,non ricordavo proprio questa cosa!
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

"Faber est suae quisque fortunae ." [ Appio Claudio Cieco]

Rispondi