Một số mã cũ mà tôi chỉ đi qua:Tại sao mã này vẫn hoạt động?
MLIST * new_mlist_link()
{
MLIST *new_link = (MLIST *) malloc(sizeof(MLIST));
new_link->next = NULL;
new_link->mapi = NULL;
new_link->result = 0;
}
này đã được kêu gọi để xây dựng một danh sách liên kết, tuy nhiên tôi nhận thấy không có tuyên bố:
return new_link;
Mặc dù không có báo cáo kết quả lợi nhuận ở đó, danh sách vẫn được xây dựng đúng cách. Tại sao điều này xảy ra?
Edit: Hệ điều hành: Mandriva 2009 64bit Linux 2.6.24.7-server GCC 4.2.3-6mnb1
Edit: vui ... mã này cũng chạy successfuly trên khoảng 5 cài đặt Linux khác nhau, tất cả các phiên bản/hương vị khác nhau cũng như máy Mac.
Không có câu trả lời có thể còn một số tồn câm may mắn, trừ khi (hoặc thậm chí nếu) bạn cho chúng tôi biết những gì nền tảng. – Potatoswatter
Điều này tạo ra một trường hợp tốt để sử dụng trình kiểm tra mã tĩnh. – semaj
Thú vị là nó chạy trên rất nhiều nền tảng. Nó chỉ có một biến cục bộ, vì vậy nó phải khá chuẩn cho GCC trên Intel để lưu trữ một biến cục bộ duy nhất trong EAX (hoặc tương đương 64 bit của nó), và cũng có thể sử dụng thanh ghi đó cho các giá trị trả về. –