Tiếp tục trên từ bình luận của bạn: "bạn có thể xin hãy giải thích trên tờ khai chuyển tiếp" ...
Chuyển tiếp tuyên bố là chính xác những gì họ âm thanh như thế nào. Một tuyên bố sẽ, ở nơi khác (thường sau này) được xác định. Khái niệm này chỉ áp dụng cho các biểu tượng toàn cục. Chỉ có thể có MỘT định nghĩa của một biểu tượng toàn cầu trong một kết quả nhị phân. Tuy nhiên, bạn có thể khai báo chúng nhiều lần trong mã nguồn để chúng có thể được tham chiếu trong giai đoạn biên dịch.
Các ký hiệu này trở thành định nghĩa trong assembly, sau đó được sử dụng để liên kết mọi thứ với nhau trong giai đoạn liên kết.
Tệp tiêu đề là một ví dụ sử dụng phổ biến của các khai báo chuyển tiếp được xác định ở nơi khác (sau này) trong mã.
Biến cục bộ (tự động) không được chuyển đổi thành biểu tượng. Vì vậy, khi bạn nói điều gì đó giống như
int x;
int x;
trong phạm vi tương tự, trình biên dịch không cho phép nó vì nó vô nghĩa. Biến cục bộ chỉ đơn giản là một sự thuận tiện để trỏ đến một vị trí cụ thể trong khung ngăn xếp của hàm. Ranh giới định nghĩa của chúng nằm trong phạm vi đánh dấu phạm vi {
}
.
Tệp tiêu đề thực chất là "các khai báo chuyển tiếp" của các biến và chức năng toàn cầu; để thấy điều này cho bạn như trong struct foo;
.
Nếu bạn muốn xem lỗi nguyên nhân định nghĩa toàn cầu, hãy thử. int x = 10;
int x = 11;
là toàn cầu và bạn sẽ thấy trình biên dịch tạo ra lỗi cho hiệu ứng "redifintion of x".
Nguồn
2011-11-14 17:06:36
tôi đồng ý với những gì bạn nói. Nhưng tại sao không cùng một điều áp dụng cho các biến địa phương. Tôi điều tôi thiếu một cái gì đó rất rõ ràng. Vui lòng chỉ đúng hướng – Bazooka
bạn có thể có định nghĩa dự kiến chỉ cho các biến có phạm vi tệp và không cho biến cục bộ. –