Newsgroup: it.comp.lang.c
Titolo: casting su malloc

ciao a tutti
tempo fa nel newsgroup mi sembra di aver visto dei post
in cui veniva scoraggiato l'uso del casting in C perche' deleterio per
alcuni programmi fatti girare su certi compilatori.
mi e' sfuggito il motivo di cio' ... perche' quindi e' sconsigliato l'uso
del casting con la malloc?
grazie

 del casting con la malloc?
Copia esattamente queste righe di codice:
--- start here ---
#include <stdlib.h>
int main() {
       int *a = malloc(10 * sizeof(int));
       free(a);
       return 0;
}
--- end ---
--- start here ---
int main() {
        int *a = (int*) malloc("se vuoi una spiegazione piu` dettagliata",
        "cercati su google questi thread:", "Cast sul valore di ritorno"
        "della malloc", "chiarimento su malloc()", 666);
        free(a);
        return 0;
}
--- end ---
Noti nulla di strano?
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Il coraggio non mi manca.
E` la paura che mi frega...


Ciao Kronos
ho visto che il primo programma viene compilato correttamente,
il secondo no, ma per via degli argomenti della malloc, nel caso in cui il
senso non fosse,...,vattele a cercar da solo il motivo e non rompermi le
scatole ehheh.
provando con argomenti corretti nella malloc del secondo programma viene
compilato correttamente anche esso ... bho

 programma viene compilato correttamente anche esso ... bho
Il problema e' proprio nel fatto che il programmatore potrebbe
sbagliare il tipo e il numero di argomenti di malloc e il 
compilatore non gli direbbe nulla in proposito.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 il secondo no, ma per via degli argomenti della malloc, 
Purtroppo il secondo compila correttamente (non devi includere stdlib.h)
al  limite otterrai  un  warning per  il fatto  che  il compilatore  non
conosce il prototipo  di free e malloc. Quando il  compilatore trova una
chiamata  ad una  funzione non  dichiarata suppone  che quella  funzione
accetti esettamente gli  argomenti che gli vengono passati  e ritorni un
int.
Se non  avessi messo  il cast  il compilatore  mi avrebbe  segnalato che
stavo  facendo  un  assegnamento  non corretto  (sto  assegnando  ad  un
puntatore un intero). Con il cast l'errore viene mascherato.
Fin dal  C89 la  conversione da  un puntatore  qualunque a  un void  * e
viceversa e` automatica. Il cast  (potenzialmente) viola la tipizzazione
del linguaggio e va usato solo quando e` veramente necessario.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
#include <stdio.h> 
int main(void) {printf("\t\t\b\b\b\b\b\b");
printf("\t\t\b\b\b\b\b\b");return 0;}

>
GRAZIE

questo aumenta la leggibilita' del codice.
Assolutamente no.  L'aumento di leggibilita' non puo'
convivere con la pericolosita' del codice.
Il cast, in C++, e' *obbligatorio*, quindi non viola
assolutamente nulla.  Non e' affatto *necessario*, in C, in
quanto la trasformazione da puntatore void a qualsiasi altro
puntatore e' implicita.  Non aumenta affatto la
leggibilita', in quanto leggere il cast comporta leggere
qualcosa in piu', che non e' necessario che vi sia.
Il tuo interlocutore ha le idee MOLTO confuse su cosa sia il
cast, quali siano le regole C e le regole C++.
Non ascoltarlo.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]