Pagina 1 di 1

Inspiegabile (per me) errore di compilazione[Risolto!]

Inviato: dom lug 05, 2009 20:05
da Blallo
ho fatto un piccolo programmino con le strutture

Codice: Seleziona tutto

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

struct poligono
{
   int nlati;
   double lato;
};

struct poligono creapoli(void);
double areapoli(struct poligono p);
double perimpoli(struct poligono p);
void doppiopoli(struct poligono *pp);

int main()
{
   struct poligono poli, poli2;

   poli=creapoli();
   printf("Il poligono ha perimetro %f e area %f", perimpoli(poli), areapoli(poli));
   poli2=poli;
   doppiopoli(&poli2);
   printf("Il poli2 ha perimetro %f e area %f", perimpoli(poli2), areapoli(poli2));
   return EXIT_SUCCESS;
}

struct poligono creapoli(void)
{
   struct poligono po;
   printf("Inserire numero lati:");
   scanf("%d", &po.nlati);
   printf("Inserire lunghezza lati:");
   scanf("%lf", &po.lato);
}

double perimpoli(struct poligono p)
{
   return p.lato*p.nlati;
}

double areapoli(struct poligono p)
{
   const double PI = 4.0 * atan(1.0);
     double a=PI/p.nlati;
   return (p.nlati*p.lato*p.lato)/(4.0 * tan(a));
}

void doppiopoli(struct poligono *pp)
{
   pp->lato*=2;
}

ma al momento di compilare nella function areapoli la tan mi da problemi (a quanto deduco dall'output di gcc):

Codice: Seleziona tutto

$ gcc Es_02.c
/tmp/cc8cUxh9.o: In function `areapoli':
Es_02.c:(.text+0x1c2): undefined reference to `tan'
collect2: ld returned 1 exit status

cosa può essere?

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 20:17
da Mario Vanoni
$ gcc Es_02.c -lm

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 20:23
da JohnnyMnemonic
Ovvero, quando includi la libreria math.h devi indicarlo a gcc aggiungendo il flag -lm (lib math)

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 20:28
da Blallo
grazie mille...non lo sapevo #-o
ci sono altri parametri particolari includendo altre lib?

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 20:52
da Mario Vanoni
jimmy_page_89 ha scritto:grazie mille...non lo sapevo #-o
ci sono altri parametri particolari includendo altre lib?


Sapendo di includere math.h, dove hai scoperto tan(3)?
man tan te lo diceva.

-lfl per compilare usando flex/lex/bison/yacc
-lcrypt quando c'e` di mezzo pwd.h/shadow.h

ed altri ...

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 21:20
da Blallo
grazie mille mario...
avevo letto qualcosa sul man di questo parametro ma non avevo capito che si doveva usare in gcc :D

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 21:56
da metrofox
jimmy_page_89 ha scritto:grazie mille mario...
avevo letto qualcosa sul man di questo parametro ma non avevo capito che si doveva usare in gcc :D


Sese... :lol: Dillo che non avevi voglia :roll:

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 22:13
da Blallo
metrofox ha scritto:
jimmy_page_89 ha scritto:grazie mille mario...
avevo letto qualcosa sul man di questo parametro ma non avevo capito che si doveva usare in gcc :D


Sese... :lol: Dillo che non avevi voglia :roll:

giuro che l'avevo letta :?

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom lug 05, 2009 23:04
da 414N
jimmy_page_89 ha scritto:

Codice: Seleziona tutto

struct poligono creapoli(void)
{
   struct poligono po;
   printf("Inserire numero lati:");
   scanf("%d", &po.nlati);
   printf("Inserire lunghezza lati:");
   scanf("%lf", &po.lato);
}



Magari una "return po" aiuta in questo pezzo di codice...

Re: Inspiegabile (per me) errore di compilazione

Inviato: lun lug 06, 2009 0:50
da Blallo
414N ha scritto:
jimmy_page_89 ha scritto:

Codice: Seleziona tutto

struct poligono creapoli(void)
{
   struct poligono po;
   printf("Inserire numero lati:");
   scanf("%d", &po.nlati);
   printf("Inserire lunghezza lati:");
   scanf("%lf", &po.lato);
}



Magari una "return po" aiuta in questo pezzo di codice...

Esatto, l'ho inserito appena ho riprovato a compilare, ma grazie lo stesso di avermelo segnalato :rabbit:

Re: Inspiegabile (per me) errore di compilazione

Inviato: lun lug 06, 2009 10:44
da Vito
Ma perchè non usi qualche alias?

non è scompodo dichiarare ogni volta
"struct bla blabla"?

Codice: Seleziona tutto

typedef struct poligono pol;


ad esempio in modo che quando devi dichiarare un "poligono" dovrai fare solamente:

Codice: Seleziona tutto

pol quadrato;



abiutidini! ;-)

Inoltre per le costanti è più "elegante" usare delle #define ,così fai vedere che sai risparmiare anche memoria... :p

Re: Inspiegabile (per me) errore di compilazione

Inviato: lun lug 06, 2009 12:55
da Blallo
l'esercizio mi chiedeva esplicitamente di non usare il typedef (infatti me lo chiede al pto successivo dell'esercizio) :D

Re: Inspiegabile (per me) errore di compilazione

Inviato: lun lug 06, 2009 13:47
da Vito
jimmy_page_89 ha scritto:l'esercizio mi chiedeva esplicitamente di non usare il typedef (infatti me lo chiede al pto successivo dell'esercizio) :D


come non detto allora ;-)