Newsgroup: it.comp.os.linux.development
Titolo: warning: incompatible implicit declaration of built-in function 'strlen'

Ciao,
ho fatto l'upgrade a gcc 4.0 e mi ritrovo con diversi warning in
oggetto tutti sulle funzioni strlen, malloc, strdup, strchr. Come debbo
scrivere il codice per non incappare in questi warning ?
Esempi del codice in questione:
if (line != NULL) gtk_text_buffer_insert (textbuf, &enditer, line,
strlen ( line ) );
escaped = (char *) malloc (strlen(string) + escapechars + 1);
Grazie,
Colossus

 scrivere il codice per non incappare in questi warning ?
si puň sapere anche quali sono i warning in questione?
-- 
MSN: sirpsycho_78 -at- hotmail dot com
"Miss, simme juti a ferně int' 'o cess, e mo' ca rimango 'i sulo, te 
mann 'a fanculo."

i warning sono sempre gli stessi e sono nel soggetto del thread...
Colossus

 
Sě, scusa. Stai compilando come C o C++? che header includi?


 escaped = (char *) malloc (strlen(string) + escapechars + 1);
Includi <string.h>, <stdlib.h> e togli il cast dal valore di ritorno di
malloc().
Luca
-- 
Home: 
http://kronoz.cjb.net
Inquietudine sintetica
Solo, davanti all'ignoto
Tienimi stretto a te

Sto compilando come c. Includo gli header delle gtk2 , <errno.h> e
<sys/wait.h>.
Colossus

E' bastato aggiungere string.h nel file header è tutto è a posto. Mi
potresti gentilemente spiegare il perchè non ottengo più quei warning
? Ed il cast, perchè lo devo togliere ?
Grazie mille,
Colossus

Colossus wrote:

allora il problema č che non includi gli header nei quali sono 
dichiarate le funzioni, ad esempio strlen si trova dichiarata in <string.h>
HTH


Scusa, ho chiesto a kronos il perchè di questo ma non avevo visto la
tua risposta; col gcc 3.4.3 non avevo questi warning, il 4 è più
pignolo allora !
P.S sei molto celere nel rispondere, grazie mille.
Colossus

 P.S sei molto celere nel rispondere, grazie mille.
figurati!


  ti parte il warning.
Premetto che la 3.4 ha introdotto parecchie "novita`"...
Gli includes sono una spece di catena. Includi aaa.h e questo ti include
(perche` ne ha bisogno, intendiamoci) bbb.h e ccc/ddd.h. Quindi il compilatore
si ritrova un sacco di dichiarazioni "inutili". Ovviamente la catena dipende
dall'installazione, dalla versione e dalla fase della luna ;-)
Il modo "ufficiale" per includere *tutti* gli include necessari e` di fare
un bel man delle funzioni. Tutte le pagine danno l'include o gli include
che servono per la funzione in questione. Per esempio, "man select" ritorna:
        #include <sys/time.h>
        #include <sys/types.h>
        #include <unistd.h>
        int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
        struct timeval *timeout);
Quindi, per la select devo includere i tre files di cui sopra...
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 Ed il cast, perchè lo devo togliere ?
Il cast da void* a T* e viceversa e` automatico in C (non in C++). Il
cast e` deleterio perche` maschera la mancata inclusione dell'header
stdlib.h.
Luca
-- 
Home: 
http://kronoz.cjb.net
Carpe diem, quam minimum credula postero. (Q. Horatius Flaccus)

 stdlib.h.
Concordo. Inoltre la definizione potrebbe contenere del codice inline
(spero che non sia vero in questo caso, ma non si puo` mai dire). Vedi,
come esempio, la definizione di assert().
