Newsgroup: it.comp.lang.c
Titolo: Struct in C. Help!

Un saluto a tutti. Il mio problema è capire i limiti del costrutto
struct in C.
L'unico libro a mia disposizione (misto C/C++) afferma che il seguente
codice è valido:
struct coppia
{
   int a;
   int b;
};
ovvero che così si definisce un nuovo tipo di dati che può poi essere
usato per definire variabili di tipo 'coppia' in questo modo:
coppia c;
Ho fatto la prova con GCC che mi ha mandato a quel paese, o almeno
credo, nel senso che non mi ha dato alcun errore nelle righe dello
struct, ma ogni volta che tento di definire una variabile di tipo
'coppia' mi dice che 'coppia' non è definito e si blocca. Non ho ben
capito allora cosa significhino in C per lui quelle righe che ha
'digerito' senza errori, visto che poi il nuovo tipo 'coppia' non è
disponibile.
Per tentativi ho scoperto che non si può fare una struct senza nome (e
questo è ovvio), e che se faccio così:
struct
{
   int a;
   int b;
} prova;
 mi definisce una variabile 'prova' che ha la struttura giusta.
Ho preso allora l'abitudine di scrivere
typedef struct {struttura} nuovo_tipo;
per definire dei nuovi tipi di dati, visto che così funziona.
Ora ho però un problema, perchè non riesco a definire l'elemento di
una lista concatenata, ovvero a definire una struttura che contiene un
puntatore ad un'altra struttura dello stesso tipo. Se infatti scrivo:
typedef struct {
   int valore;
   elemento* prossimo;
   } elemento;
il GCC se la prende moltissimo, da cui ho capito che in C questa
definizione è errata. Vi chiedo allora se è possibile ottenere un
nuovo tipo così definito e se sì come.
Mille grazie e scusate se navigo sempre a cavallo del C e del C++, ma
come vi dicevo all'inizio l'unico libro a mia disposizione è sul C++,
e a volte non si prende la briga di dire cosa nel C non va e cosa sì.
In realtà è in due volumi, e mi era parso di capire (sbagliando) che
il primo fosse sul C, ed il secondo estendesse le nozioni anche al
C++. Oramai...
Ciao ciao, Piero.

you wrote :
#struct coppia
#{
#   int a;
#   int b;
#};
#
#ovvero che cosě si definisce un nuovo tipo di dati che puň poi essere
#usato per definire variabili di tipo 'coppia' in questo modo:
#
#coppia c;
Non cosi', ma come 
struct coppia c ;
"coppia" e' un cosiddetto "tag" cioe' non e' un identificatore di
tipo.
#typedef struct {
#   int valore;
#   elemento* prossimo;
#   } elemento;
Non puoi farlo perche' elemento, al momento della definizione del
puntatore prossimo non esiste ancora come tipo a se' stante.
typedef struct tag_elemento {
                              int valore;
                              struct tag_elemento * prossimo;
                            } elemento ;
--------------------------------------------------------
* Andrea Laforgia        (
andrea_...@bigfoot.com
) *
--------------------------------------------------------

 Ciao ciao, Piero.
Spero di esserti stato d'aiuto.
Ciao, Luca.
-- 
 Reply to 
luca....@tiscalinet.it
 UIN : 43385135

 coppia c;
devi scrivere:
struct coppia C;
perchè il C, a differenza del C++, il tipo ha nome "struct coppia", e non
solo "coppia"
In realtà anche in C++, ma se non c'è ambiguità nei nomi, accetta anche solo
"coppia".
--
Alessandro Monti