Некоторые старый код, который я только что наткнулся:Почему этот код по-прежнему работает?
MLIST * new_mlist_link()
{
MLIST *new_link = (MLIST *) malloc(sizeof(MLIST));
new_link->next = NULL;
new_link->mapi = NULL;
new_link->result = 0;
}
Это называют построить связанный список, однако я заметил, что нет заявления:
return new_link;
Даже без возвращения заявления там, список по-прежнему построен правильно. Почему это случилось?
Edit: Платформа: Mandriva 2009 64bit Linux 2.6.24.7-сервер GCC 4.2.3-6mnb1
Edit: ... Смешной этот код тоже побежал успешно на около 5 различных установок Linux, все разные версии/вкусы, а также Mac.
Там нет никакого возможного ответа в стороне от тупого везения, если (или, может быть, даже если) вы дайте нам знать, какую платформу. – Potatoswatter
Это хороший пример использования статической проверки кода. – semaj
Интересно, что он работал на стольких платформах. Он имеет только одну локальную переменную, поэтому для GCC на Intel должно быть достаточно стандартно хранить одну локальную переменную в EAX (или ее 64-битный эквивалент), а также использовать этот регистр для возвращаемых значений. –