Đây là giao dịch. Tôi đã có hai biến toàn cục giống hệt nhau trong hai tệp .c khác nhau, chúng không được khai báo là extern. Vì vậy, mỗi tệp .c sẽ thấy biến riêng của nó, phải không?Hai biến có cùng tên và loại, trong hai tệp .c khác nhau, biên dịch với gcc
Nhưng tôi đã nhận được một số hành vi thực sự kỳ lạ, như thể một tệp đang đọc biến tệp khác (sau khi liên kết chúng với nhau). Thêm vòng loại 'tĩnh' vào cả hai định nghĩa biến dường như để khắc phục vấn đề này.
Vì vậy, những gì tôi thực sự tự hỏi là, chính xác những gì đã xảy ra ở đó mà không có vòng loại 'tĩnh'?
Xem thêm http://stackoverflow.com/questions/1490693/định nghĩa-định nghĩa-in-c99-và-liên kết cho các khía cạnh phức tạp của liên kết extern. –
@Pascal Câu trả lời của bạn thực sự là hoàn chỉnh nhất, quá tệ Tôi không thể gắn cờ nó là một trong những chấp nhận. Tôi nghĩ về bản thân mình làm một cái gì đó tương tự như những gì bạn đã làm ở đó với 'nm '. Chỉ có điều mà nói đến cái tâm của tôi về tình trạng này là nó là một lỗ hổng lớn trong tiêu chuẩn, nó thậm chí còn nói về ở đây http://www.jetcafe.org/jim/c-style.html#need_extern. Ý tôi là, ai trong địa ngục nghĩ rằng nó sẽ tốt đẹp nếu trình biên dịch giả định vòng loại 'extern'? C++ chắc chắn là địa ngục không làm giả định ngu ngốc như vậy. – johndoevodka