Newsgroup: it.comp.lang.c
Titolo: Sintassi di malloc() con strutture

Salve,
con la seguente dichiarazione di tipo:
struct tiponodo { ...
                           dichiarazione dei campi...
                          ...; };
nelle due istruzioni seguenti è OBBLIGATORIO ripetere la parola struct?
...
struct tiponodo *p;
if ((p=(struct tiponodo *) malloc(sizeof(struct tiponodo))) == NULL)
                                             { printf("Memoria non
disponibile"); }
...
Grazie.
-- 
Posted from 
mta15-acc.tin.it
 [212.216.176.46] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 disponibile"); }
Se magari definisci tiponodo in questo modo:
typedef struct tiponodo {
         //dichiarazione dei campi...
         //...
} tiponodo;
'struct' poi diventa non obbligatorio, ma superfluo.
Ciao
Domenico Barra

 via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Sì, a meno di usare un typedef:
typedef struct {
......
} TIPO_NODO;
TIPO_NODO *p;
if ((p=(TIPO_NODO *) malloc(sizeof(TIPO_NODO))) == NULL)
      { printf("Memoria non > disponibile"); }
HTH gfb.

'struct' poi diventa non obbligatorio, ma superfluo.
Mi sembra di ricordare che il nome della struttura non
puo' essere uguale a quello del typedef. Un sistema che
uso spesso e:
  typedef struct TIPONODO_TAG
  {
    ...
  } TipoNodo;
  TipoNodo *NewTipoNodo()
  { 
   TipoNodo *tp=Malloc(sizeof(TipoNodo));
    ...
    return tp;
  }
Il brutto nome TIPONODO_TAG sono abbligato ad
usarlo solo con liste o altre strutture che
contengono puntatori alla stuttura stessa:
  typedef struct TIPONODO_TAG
  {
    struct TIPONODO_TAG *prev,*next;
    ...
  } TipoNodo;
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff


Grazie mille, non sapevo dell'impossibilità di tale uso di typedef :-)
Ciao
Domenico

puo' essere uguale a quello del typedef. 
No, e' corretto.
Una dichiarazione di tipo come :
typedef struct Topolino {
        int a, b, c ;
} Topolino ;
e' perfettamente lecita.
D'altronde non c'e' alcun motivo di ambiguita'.
-- 
Andrea Laforgia (ICQ# 87230455) ---------------------------
Non scrivetemi in privato, se non richiesto espressamente.
No replies in private e-mail, unless explicitly requested.
----------------------------------------------------------

 
Guarda un po' qua:
 
ghigo@sphera:/tmp$ cat tmp.c
 
typedef struct a_tag A;
 
struct a_tag { 
        A*      *prev, *next;
        };
 
int main( ){
        A a;
        return 0; 
}
ghigo@sphera:/tmp$ gcc -Wall -o tmp tmp.c
tmp.c: In function `main':
tmp.c:13: warning: unused variable `a'
ghigo@sphera:/tmp$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.2/specs
gcc version 2.95.2 20000220 (Debian GNU/Linux)
ghigo@sphera:/tmp$
Cosa ne pesi/ate ?


Normale, visto che dichiari la variabile ma non la usi.
HTH gfb

 HTH gfb
:) scusa ma la tua affermazione e' un po' ingenua; comunque il compilatore 
non dovrebbe compilare se fosse sbagliata. In ogni caso per sciogliere 
eventuali dubbi
ghigo@sphera:/tmp$ cat tmp.c
 
typedef struct a_tag A;
 
struct a_tag {
          A*      *prev, *next;
};
 
int main( ){
        A a;
 
        a.next=0;
        return (int)a.next;
}
ghigo@sphera:/tmp$ gcc --pedantic --ansi -Wall -o tmp tmp.c
ghigo@sphera:/tmp$ ./tmp
ghigo@sphera:/tmp$