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.
Avatar utente
Blallo
Packager
Packager
Messaggi: 3284
Iscritto il: ven ott 12, 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!]

Messaggioda Blallo » dom lug 05, 2009 20: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 21:09, modificato 1 volta in totale.
My DWM configuration: https://github.com/8lall0/dwm

Feel free to use.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 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

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

$ gcc Es_02.c -lm

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom set 05, 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

Messaggioda JohnnyMnemonic » dom lug 05, 2009 20:23

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

Avatar utente
Blallo
Packager
Packager
Messaggi: 3284
Iscritto il: ven ott 12, 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

Messaggioda Blallo » dom lug 05, 2009 20:28

grazie mille...non lo sapevo #-o
ci sono altri parametri particolari includendo altre lib?
My DWM configuration: https://github.com/8lall0/dwm

Feel free to use.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun set 03, 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

Messaggioda Mario Vanoni » dom lug 05, 2009 20: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 ...

Avatar utente
Blallo
Packager
Packager
Messaggi: 3284
Iscritto il: ven ott 12, 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

Messaggioda Blallo » dom lug 05, 2009 21:20

grazie mille mario...
avevo letto qualcosa sul man di questo parametro ma non avevo capito che si doveva usare in gcc :D
My DWM configuration: https://github.com/8lall0/dwm

Feel free to use.

Avatar utente
metrofox
Linux 2.6
Linux 2.6
Messaggi: 758
Iscritto il: gio ago 07, 2008 12: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 metrofox » dom lug 05, 2009 21: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
Blallo
Packager
Packager
Messaggi: 3284
Iscritto il: ven ott 12, 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

Messaggioda Blallo » dom lug 05, 2009 22: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 :?
My DWM configuration: https://github.com/8lall0/dwm

Feel free to use.

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2893
Iscritto il: mer feb 13, 2008 16:19
Slackware: 14.2
Kernel: 4.4.19
Desktop: KDE4
Località: Bulagna
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggioda 414N » dom lug 05, 2009 23: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
Blallo
Packager
Packager
Messaggi: 3284
Iscritto il: ven ott 12, 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

Messaggioda Blallo » lun lug 06, 2009 0: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:
My DWM configuration: https://github.com/8lall0/dwm

Feel free to use.

Avatar utente
Vito
Staff
Staff
Messaggi: 4177
Iscritto il: mar dic 05, 2006 17:28
Nome Cognome: Vito
Distribuzione: Linux Mint 17
Località: Augsburg (DE)
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Vito » lun lug 06, 2009 10: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
Blallo
Packager
Packager
Messaggi: 3284
Iscritto il: ven ott 12, 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

Messaggioda Blallo » lun lug 06, 2009 12:55

l'esercizio mi chiedeva esplicitamente di non usare il typedef (infatti me lo chiede al pto successivo dell'esercizio) :D
My DWM configuration: https://github.com/8lall0/dwm

Feel free to use.

Avatar utente
Vito
Staff
Staff
Messaggi: 4177
Iscritto il: mar dic 05, 2006 17:28
Nome Cognome: Vito
Distribuzione: Linux Mint 17
Località: Augsburg (DE)
Contatta:

Re: Inspiegabile (per me) errore di compilazione

Messaggioda Vito » lun lug 06, 2009 13: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]


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite