Algunos código antiguo que yo acabo de encontrar:¿Por qué este código todavía funciona?
MLIST * new_mlist_link()
{
MLIST *new_link = (MLIST *) malloc(sizeof(MLIST));
new_link->next = NULL;
new_link->mapi = NULL;
new_link->result = 0;
}
Esto estaba siendo llamado a construir una lista enlazada, sin embargo me di cuenta de que no hay declaración:
return new_link;
Incluso sin la instrucción de retorno allí, la lista aún se construyó correctamente. ¿Por qué pasó esto?
Editar: Plataforma: Mandriva Linux 2009 de 64 bits GCC 2.6.24.7-servidor 4.2.3-6mnb1
Editar: divertido ... este código también funcionó exitosamente en unos 5 diferentes instalaciones de Linux, todas diferentes versiones/sabores, así como una Mac.
No hay una respuesta posible al margen de la pura suerte, a menos que (o tal vez incluso si) usted nos deja saber qué plataforma. – Potatoswatter
Esto es un buen argumento para usar un verificador de código estático. – semaj
Es interesante que se ejecutara en tantas plataformas. Solo tiene una variable local, por lo que debe ser bastante estándar que GCC en Intel almacene una sola variable local en el EAX (o su equivalente de 64 bits), y también que use ese registro para los valores de retorno. –