Kitabı neden malloc dökme söylemem gerekir mi?
Bugün sayfa ulaştım167The C Programming Language (second edition Brian W. Kernighan & Dennis M. Ritchie) yazar malloc
dökme etmem gerektiğini söylüyor bulundu. Burada kitaptan bir bölüm:
7.8.5 Depolama Yönetimi
Fonksiyonlar ve Dinamik Bellek blokları malloc calloc edinin.
void *malloc(size_t n)
eğer bu isteği yerine olamaz eğer n bir işaretçi başlatılmamış depolama bayt döndürür.
void *calloc(size_t n, size_t size)
döndürür, belirtilen boyutu n nesneleri bir dizi için yeterli boş alan için bir işaretçi veya NULL isteği tatmin edemez. Depolama sıfıra başlatıldı. Bu malloc veya calloc ile iade söz konusu nesne için uygun bir uyum vardır ama uygun bir tür içine dönüştürmelisiniz
int *ip; ip = (int *) calloc(n, sizeof(int));
Ben zaten malloc
(ve ailesine) türü döndürür* geçersizve there are good explanations why not to cast malloc
.
Ama sorum şu: Neden kitap koyun demeliyim?
CEVAP
http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm:
Pre-ANSI C K açıklanan&R-1 -- -- malloc ()
char *
döndü ve her durumda dönüş değeri atama için gerekliydi değişken de Almachar *
değildi.void *
yeni tip Standart C bu bükülmeler gereksiz kılıyor.Gereksiz yere sıçrayan utanç birini kurtarmak için K savunma&R-2, sordum Dennis Ritchie verebilecek bir görüş için cümlenin geçerliliğini alıntı sayfa 142 yukarıda gösterdi. O cevap verdi:
Her durumda, artık o p hakkında bir yazı okudum. 142, bence yanlış; sadece savunma değil böyle bir şekilde yazılmış daha önce kurallara aykırı, ANSI kurallarını tanıtır.
Malloc sonucu dökme muyum?...
Neden nesne yerine bir işaretçi kendis...
Neden C programcıları 'yeni kulla...
Neden bu Java programı görünüşte rağme...
Neden malloc calloc memset daha yavaşt...