Repository 32bit  Forum
Repository 64bit  Wiki

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.

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

Messaggioda Blallo » dom lug 05, 2009 19:05

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 lug 06, 2009 20:09, modificato 1 volta in totale.
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Mario Vanoni » dom lug 05, 2009 19:17

$ gcc Es_02.c -lm
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: Inspiegabile (per me) errore di compilazione

Messaggioda JohnnyMnemonic » dom lug 05, 2009 19:23

Ovvero, quando includi la libreria math.h devi indicarlo a gcc aggiungendo il flag -lm (lib math)
Avatar utente
JohnnyMnemonic
Staff
Staff
 
Messaggi: 2732
Iscritto il: sab set 04, 2004 23:00
Località: Bologna
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Blallo » dom lug 05, 2009 19:28

grazie mille...non lo sapevo #-o
ci sono altri parametri particolari includendo altre lib?
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Mario Vanoni » dom lug 05, 2009 19:52

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 ...
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Blallo » dom lug 05, 2009 20:20

grazie mille mario...
avevo letto qualcosa sul man di questo parametro ma non avevo capito che si doveva usare in gcc :D
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Inspiegabile (per me) errore di compilazione

Messaggioda metrofox » dom lug 05, 2009 20:56

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
metrofox
Linux 2.6
Linux 2.6
 
Messaggi: 758
Iscritto il: gio ago 07, 2008 11:29
Slackware: slackware64-current
Kernel: 3.4.4-ck3
Desktop: FluxBox-1.3.1
Distribuzione: FreeBSD-8.1(amd64)

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Blallo » dom lug 05, 2009 21:13

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 :?
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Inspiegabile (per me) errore di compilazione

Messaggioda 414N » dom lug 05, 2009 22:04

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
414N
Iper Master
Iper Master
 
Messaggi: 2882
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Blallo » dom lug 05, 2009 23:50

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:
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Vito » lun lug 06, 2009 9:44

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
Vito
Staff
Staff
 
Messaggi: 4135
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg (DE)
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Blallo » lun lug 06, 2009 11:55

l'esercizio mi chiedeva esplicitamente di non usare il typedef (infatti me lo chiede al pto successivo dell'esercizio) :D
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3234
Iscritto il: ven ott 12, 2007 10:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14.1 / 12.2
Kernel: 3.12.2-ck
Desktop: Openbox

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Vito » lun lug 06, 2009 12:47

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]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 4135
Iscritto il: mar dic 05, 2006 17:28
Località: Augsburg (DE)
Nome Cognome: Vito
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Linux Mint 17


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite