Trong trường hợp nào GCC có thể không phải là gửi thông báo lỗi liên kết "tham chiếu không xác định" khi cố gọi các chức năng được thiết lập?GCC có thể không phàn nàn về các tài liệu tham khảo không xác định?
Ví dụ, một tình huống trong đó mã C này được biên dịch và liên kết bởi GCC:
void function()
{
made_up_function_name();
return;
}
... mặc dù made_up_function_name
là không có mặt bất cứ nơi nào trong mã (không tiêu đề, các file nguồn, khai báo, cũng không phải thư viện của bên thứ ba nào).
Loại mã đó có thể được GCC chấp nhận và biên soạn trong một số điều kiện nhất định mà không cần chạm vào mã thực? Nếu có, thì sao?
Cảm ơn.
CHỈNH SỬA: không có tuyên bố trước nào hoặc đề cập đến made_up_function_name
có mặt ở bất kỳ nơi nào khác. Có nghĩa là grep -R
của toàn bộ hệ thống tệp sẽ chỉ chỉ cho thấy dòng mã đơn chính xác.
Có thể (miễn là bạn đang biên dịch C, không phải C++). Bạn đang cố gắng làm gì? –
Tôi không cố gắng thực hiện bất cứ điều gì, nó đã xảy ra và tôi muốn biết tại sao nó có thể. Hàm made_up_function_name thực sự xuất hiện trong tệp nhị phân cuối cùng, được liên kết nếu tôi sử dụng "-g" và chỉnh sửa tệp bằng trình chỉnh sửa văn bản. – STenyaK
Về lý do, hãy xem: http://stackoverflow.com/questions/4914589/c-prototype-functions/4914683, http://stackoverflow.com/questions/4800102/not-including-stdlib-h-does-not -produce-any-compiler-error/4800138 # 4800138, và có thể khá nhiều hơn nữa. –