PDA

Visualizza la versione completa : [C] Diversi errori in compilazione usando Dev-C++


sicula83
15-06-2009, 12:27
Ciao ragazzi,
volevo chiedervi un aiuto con C...premetto che sto iniziando adesso a studiare il linguaggio C e, dato che ho Windows XP, ho installato Dev C++.
Quando per compilo un file mi d tanti errori e non posso mandarlo in esecuzione.
Vi spiego passo passo cosa faccio io, cos vedo dove sbaglio.
Allora innanzittuto eseguo questi passi:
FILE-NUOVO-FILE SORGENTE e scrivo il mio bel programmino, che posto qui di seguito:


#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<unistd.h>
#include<errno.h>

#define MAX_TURISTI 5


typedef struct
{
pthread_mutex_t gioconda;
pthread_cond_t turno;
int numturisti,turistiSosp;
}louvre;


louvre v;

void init(louvre * L)
{

pthread_mutex_init(&L->gioconda,NULL);
pthread_cond_init(&L->turno,NULL);
L->numturisti=0;
L->turistiSosp=0;
}

void EntraTurista(void * a)
{
struct timeval now;
struct timespec timeout;

gettimeofday(&now,NULL);
timeout.tv_sec=now.tv_sec+rand()%6;
timeout.tv_nsec=now.tv_usec*1000;
int retcode;


pthread_cond_timedwait(&(v.turno),&(v.gioconda),&timeout);

pthread_mutex_lock(&(v.gioconda));
if (v.numturisti<=5)
{
++v.numturisti;
printf("Un turista entra\n In totale ci sono %d turisti \n",v.numturisti);
guarda(&v);
}

else if(v.numturisti>5)
{
v.turistiSosp++;
printf("Un turista aspetta fuori\n In totale ci sono %d turisti che aspettano \n\n",v.turistiSosp);
retcode=pthread_cond_wait(&(v.turno),&(v.gioconda));

v.turistiSosp--;
}



printf("Un turista esce \n");
pthread_mutex_unlock(&(v.gioconda));


}


void guarda(louvre * _v)
{
if(_v->numturisti<=5)
{
pthread_mutex_lock(&(_v->gioconda));
printf("Ci sono %d turisti che guardano la gioconda \n",_v->numturisti);


_v->numturisti--;
pthread_cond_signal(&(_v->turno));
}

}





int main()
{
pthread_t visitor[50];

init(&v);

int i;

for(i=0;i<50;i++)
{
pthread_create(&visitor[i],NULL,EntraTurista,NULL);
sleep(3);
}

for(i=0;i<50;i++)
{
pthread_join(visitor[i],NULL);
}

exit( 0);
}


poi lo salvo:museo.c e clicco su:ESEGUI-COMPILA:
Appena compilo mi escono tutti una serie di errori:
No such file or directory.
14 museo.c syntax error before "pthread_mutex_t"
14 C:\Documents and Settings\user\Documenti\museo.c [Warning] no semicolon at end of struct or union
15 C:\Documents and Settings\user\Documenti\museo.c [Warning] data definition has no type or storage class
17 C:\Documents and Settings\user\Documenti\museo.c syntax error before '}' token
20 C:\Documents and Settings\user\Documenti\museo.c syntax error before "v"

ed altri errori.

Coma mai?dove sbaglio?
Grazie mille a tutti in anticipo

LeleFT
15-06-2009, 12:41
Cerca, in futuro, di utilizzare dei titoli pi significativi: il 90% delle discussioni qui presenti sono postate da persone che hanno "Problemi con C", ma ciascuna rappresenta un problema specifico.

Modifico io il titolo.


Ciao. :ciauz:

sicula83
15-06-2009, 12:43
Scusami, hai ragione...grazie epr aver modificato il titolo.

MacApp
15-06-2009, 14:20
studiati bene la sintassi del "typedef":



typedef struct IdentificatoreCheVuoi
{
pthread_mutex_t gioconda;
pthread_cond_t turno;
int numturisti,turistiSosp;
}louvre;


in cui "lovre" definito come sinonimo di "struct IdentificatoreCheVuoi".
E cambia compilatore ;-)

EDIT: dovrebbe compilare anche senza "IdentificatoreCheVuoi"... ma con "IdentificatoreCheVuoi" certamente pi portabile ;-)

sicula83
15-06-2009, 15:44
Ok vado a studiarla e ti faccio sapere. MA per Windows che compilatore dovrei usare?
Grazie mille. :smack:

Stoicenko
15-06-2009, 15:59
visual c++ 2008 express o mingw

ignaziodeblasi
15-06-2009, 16:19
Code::Blocks.. :D

Stoicenko
15-06-2009, 16:36
Code::Blocks

che non un compilatore :dh:

ignaziodeblasi
15-06-2009, 16:46
Si hai ragione, pero' e' un ide il cui compilatore e' gcc..Quindi stavo consigliando il tutto io.. :)

Stoicenko
15-06-2009, 17:14
il cui compilatore il mingw che il porting del gcc per win

Loading