Pagina 1 di 1

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

Inviato: dom 5 lug 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 5 lug 2009, 20:17
da Mario Vanoni
$ gcc Es_02.c -lm

Re: Inspiegabile (per me) errore di compilazione

Inviato: dom 5 lug 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 5 lug 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 5 lug 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 5 lug 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 5 lug 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 5 lug 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 5 lug 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 6 lug 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 6 lug 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 6 lug 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 6 lug 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 ;-)