Newsgroup: it.comp.lang.c
Titolo: tipo di malloc.

prima di andare a dormire.
straordinariamente, mi sembra di avere risolto il problema dell'altro
post (quello rabbioso), usando una struttura ricorsiva, allocata
dinamicamente con malloc.
(fino a prova contraria) il programmino di test sembra funzionare,
salvo un warning sulla chiamata a malloc.
la chiamata è la seguente:
pDato = (nodo *)malloc(sizeof(nodo));
il nodo è fatto così:
typedef struct _nodo nodo;
struct _nodo {
  int count;
  nodo *prev;
  nodo *current;
  char *text;
};
il warning:
warning: incompatible implicit declaration of built-in function
‘malloc’
io interpreto che il compilatore si lamenta perché, a rigore, malloc
restituisce un puntatore a carattere, ma non me ne fregherebbe molto
in quanto il puntatore al mio nodo dovrebbe possedere le stesse
caratteristiche fisiche di quello a carattere.
è un ragionamento sensato o l'ennesima nubbiata del 28 maggio?

 � un ragionamento sensato?
Purtroppo no.
Prima di tutto, a meno che tu non stia programmando in C pre-ANSI,
malloc ora ritorna un puntatore a void.
Secondo, l'errore di cui parli e' in seguito alla mancanza del
prototipo corretto di malloc nel tuo programma,
Cosa che puo' essere risolta includendo il file stdlib.h
Senza quel file, malloc ha il prototipo di default di qualunque
funzione senza prototipo (e questo e' vero pure nel C pre-ANSI, quando
i prototipi erano semplici dichiarazioni di valore di ritorno), ovvero
il compilatore pensa malloc ritorni un int.

 restituisce un puntatore a carattere, 
No, malloc() restituisce void* ma se non includi stdlib.h, il compilatore
non lo sa.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


:) :) .)
diavolo. cosa vuoi che possa capire questo nubbio?
non è la prima volta che incontro il termine cast nei warning di gcc,
ma fino ad ora non sono riuscito a dargli una traduzione accettabile.
aggiunto, l'include ogni problema apparente si è dissolto, e per me
potrebbe bastare così.
ma se mi rispieghi quello che hai detto sarà sicuramente utile.

 ma se mi rispieghi quello che hai detto sarŕ sicuramente utile.
Il cast č la trasformazione esplicita di un tipo in un altro. Nel caso
specifico, stai chiedendo di trasformare un void* (il tipo restituito da
malloc()) in un nodo*. Questa trasformazione č implicita in C (di contro,
il cast č obbligatorio in C++), non c'č bisogno di quel cast (nodo*)
applicato al valore di ritorno di malloc(). Ti consiglio un manuale,
comunque. Imparare da zero in questo modo č un suicidio.



allegria!!!
hai poco senso dell'umorismo.
:)
mi sono proposto di patchare un programma per una funzionalità
specifica che mi interessa.
se il lavoro fosse stato fatto da uno di voi, avrebbe finito in un
lampo.
io credo che ci metterò tre settimane.
ma ho già tutti gli elementi per concludere, tranne al più uno, che
devo pensare.
i manuali li uso, come anche navigo in internet, ma molto spesso
contribuiscono a confondermi le idee, piuttosto che farmi chiarezza.
se mi mettessi su un libro aspettando di averlo capito e digerito
tutto prima di codare hai voglia.

 tutto prima di codare hai voglia.
E invece è proprio così che dovresti fare. D'altronde stai qui a fare
domande, il che significa che hai bisogno di studio. Purtroppo di gente
che si mette a "codare" senza aver compreso bene certi concetti, ce n'è
fin troppa. Senza conoscenze solide alle spalle, rischi di fare degli
enormi pasticci. Contento tu.
