Repository 32bit  Forum
Repository 64bit  Wiki

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

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 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.
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3065
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

Re: Inspiegabile (per me) errore di compilazione

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

$ gcc Es_02.c -lm
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 21: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 20:23

Ovvero, quando includi la libreria math.h devi indicarlo a gcc aggiungendo il flag -lm (lib math)
Avatar utente
JohnnyMnemonic
Staff
Staff
 
Messaggi: 2729
Iscritto il: dom set 05, 2004 0: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 20: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: 3065
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

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 ...
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 21: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 21: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: 3065
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

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
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 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 :?
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3065
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

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

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:
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3065
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

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
Vito
Staff
Staff
 
Messaggi: 3948
Iscritto il: mar dic 05, 2006 18:28
Località: München
Nome Cognome: Vito Magnanimo
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Ubuntu 12.04

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
Io sono il detective Arsenio Magret, e porto sempre la camicia TATUATA!
Avatar utente
Blallo
Packager
Packager
 
Messaggi: 3065
Iscritto il: ven ott 12, 2007 11:37
Località: Torino / Torremaggiore (FG)
Nome Cognome: Savino Liguori
Slackware: 14 x64 / 12.2
Kernel: 3.2.x
Desktop: Xfce

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]
Avatar utente
Vito
Staff
Staff
 
Messaggi: 3948
Iscritto il: mar dic 05, 2006 18:28
Località: München
Nome Cognome: Vito Magnanimo
Slackware: 64 14.0 multilib
Kernel: 3.2.29-xps
Desktop: KDE 4.10.2
Distribuzione: Ubuntu 12.04


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti