Tôi đã làm việc trong C quá lâu đến mức thực tế là các trình biên dịch thường thêm dấu gạch dưới vào đầu của một extern
chỉ là hiểu ... Tuy nhiên, another SO question today khiến tôi băn khoăn về lý do thực sự tại sao dấu gạch dưới được thêm vào. Một tuyên bố rằng một lý do là:Tại sao các trình biên dịch C lại thêm dấu gạch dưới vào các tên bên ngoài?
Đó là thực tế phổ biến cho trình biên dịch C để thêm vào trước một hàng đầu nhấn mạnh đến tất cả các định danh chương trình phạm vi bên ngoài để ngăn chặn đụng độ với sự đóng góp từ hỗ trợ ngôn ngữ runtime
Tôi nghĩ rằng có ít nhất là một hạt nhân của sự thật cho điều này, nhưng cũng có vẻ như không thực sự trả lời câu hỏi, vì nếu gạch dưới được thêm vào tất cả các bên ngoài, nó sẽ không giúp ích gì nhiều trong việc ngăn chặn các xung đột.
Có ai có thông tin tốt về lý do cho dấu gạch dưới hàng đầu không?
Phần bổ sung gạch dưới có lý do khiến cuộc gọi hệ thống Unix creat()
không kết thúc bằng 'e' không? Tôi đã nghe nói rằng các liên kết ban đầu trên một số nền tảng có giới hạn 6 ký tự cho tên. Nếu đó là trường hợp, sau đó thêm một dấu gạch dưới vào các tên bên ngoài dường như là một ý tưởng điên rồ (bây giờ tôi chỉ có 5 ký tự để chơi với ...).
Cần lưu ý rằng hành vi này không được thực hiện trên các hệ thống ELF hiện đại. Nó đã được phổ biến trong các nền tảng aout/coff, rõ ràng. –
Tại sao Clang thực hiện trên OS X? làm thế nào tôi có thể tắt nó đi? – MarcusJ