Inspiegabile (per me) errore di compilazione[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
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

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

Messaggio 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?
Ultima modifica di Blallo il lun 6 lug 2009, 21:09, modificato 1 volta in totale.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Inspiegabile (per me) errore di compilazione

Messaggio da Mario Vanoni »

$ gcc Es_02.c -lm

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom 5 set 2004, 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggio da JohnnyMnemonic »

Ovvero, quando includi la libreria math.h devi indicarlo a gcc aggiungendo il flag -lm (lib math)

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggio da Blallo »

grazie mille...non lo sapevo #-o
ci sono altri parametri particolari includendo altre lib?

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Inspiegabile (per me) errore di compilazione

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

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggio da Blallo »

grazie mille mario...
avevo letto qualcosa sul man di questo parametro ma non avevo capito che si doveva usare in gcc :D

metrofox
Linux 3.x
Linux 3.x
Messaggi: 760
Iscritto il: gio 7 ago 2008, 12:29
Slackware: slackware64-current
Kernel: 3.4.4-ck3
Desktop: FluxBox-1.3.1
Distribuzione: FreeBSD-8.1(amd64)
Località: London

Re: Inspiegabile (per me) errore di compilazione

Messaggio 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:

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggio 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 :?

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: Inspiegabile (per me) errore di compilazione

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

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggio 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:

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: Inspiegabile (per me) errore di compilazione

Messaggio 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
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

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

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggio da Blallo »

l'esercizio mi chiedeva esplicitamente di non usare il typedef (infatti me lo chiede al pto successivo dell'esercizio) :D

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: Inspiegabile (per me) errore di compilazione

Messaggio 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 ;-)
"Stat rosa pristina nomina, nomina nuda tenemus." [ Umberto Eco - Il nome della rosa]

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

Rispondi