Oggi ho raggiunto la pagina di The C Programming Language (second edition Brian W. Kernighan & Dennis M. Ritchie) e ho rilevato che l'autore dice che devo trasmettere malloc
. Ecco la parte del libro:Perché il libro dice che devo lanciare malloc?
7.8.5 Storage Management
Le funzioni malloc e calloc ottengono blocchi di memoria in modo dinamico.
void *malloc(size_t n)
restituisce un puntatore a n byte di memoria non inizializzata, o NULL se la richiesta non può essere soddisfatta.
void *calloc(size_t n, size_t size)
restituisce un puntatore allo spazio libero sufficiente per una serie di n oggetti delle dimensioni specificate, o NULL se la richiesta non può essere soddisfatta. Lo spazio di archiviazione è inizializzato a zero. Il puntatore restituito da malloc o calloc ha l'allineamento corretto per l'oggetto in questione, ma deve essere gettato nel tipo appropriato, come in
int *ip; ip = (int *) calloc(n, sizeof(int));
so già che malloc
(e la sua famiglia) restituisce il tipo vuoto * e there are good explanations why not to cast malloc
.
Ma la mia domanda è: perché il libro dice che dovrei scriverlo?
Perché il libro è vecchio. –
Perché anche il Sole ha le sue macchie scure, sarebbe la mia risposta. In altre parole, il libro è sbagliato. Potrebbe essere che il testo precede la semantica di 'void *', e non è stato aggiornato. Vedi anche [questa risposta] (http://stackoverflow.com/a/28460192/28169). – unwind
@Michi Il libro ha molti errori fattuali e tipografici (google K & R errata), è solo in qualche modo compatibile con lo standard C90, non si rivolge all'attuale standard C né cambia la lingua dal 1990. Peggio di tutto è pieno con cattiva pratica di programmazione, cattivo stile e codice che si basa su un comportamento scarsamente specificato.Tutto ciò che devi disimparare se diventi un programmatore C professionista. – Lundin