Eso de poner
Código:
struct Nodo *nuevo = (struct Nodo *)malloc(sizeof(struct Nodo));
o
Código:
struct Nodo *nuevo = malloc(sizeof(struct Nodo));
depende de los niveles que tenga tu compilador cuando trata los avisos (
warnings) y los errores. En muchos compiladores cuando les pones el nivel mas alto al verificar los errores que puedas tener en tu codigo la construccion
struct Nodo *nuevo = malloc(sizeof(struct Nodo)); simplemente no la pasan y la tratan como si de un error se tratara y no te genera el ejecutable. Si le bajas el numero de nivel esta construccion puede que solo te de un
warning pero si te genera el programa o puede que simplemente no te diga nada al respecto. Seguramente esos compiladores que mencionas por defecto tienen un nivel no muy estricto en la comprobacion de este tipo de construcciones y por eso no te arroja ningun aviso. Lo que pasa es que cuando usas
malloc este te devuelve un apuntador a
void por lo cual lo puedes asignar a una variable que apunte a cualquier cosa y es muy propenso a que puedas a cometer un error si te descuidas, y si este es el caso, solo vas a detectar los errores cuando estes ejecutando el programa, pero muchas veces puede que tu programa funcione bien algunas veces y otras no, lo cual hace muy dificil detectar en el codigo donde esta el error.