Toàn bộ và toàn bộ mục đích của static
là tuyên bố rằng một biến là riêng tư đối với tệp nguồn được khai báo trong. Vì vậy, nó đang làm chính xác công việc của nó trong việc ngăn chặn một kết nối từ một extern.
Hãy ghi nhớ rằng có bốn hương vị của định nghĩa biến file-phạm vi:
int blah = 0;
- blah được định nghĩa trong tập tin này và truy cập từ các file khác. Định nghĩa trong các tệp khác là trùng lặp và sẽ dẫn đến lỗi.
extern int blah;
- blah phải được xác định ở nơi khác và được tham chiếu từ tệp này.
int blah;
- Đây là tương đương đạo đức của FORTRAN COMMON
. Bạn có thể có bất kỳ số nào trong số này trong các tệp và tất cả chúng được giải quyết bởi trình liên kết đến một tệp được chia sẻ int
. (*)
static int blah;
(tùy chọn với bộ khởi tạo) - Đây là tĩnh. Nó hoàn toàn riêng tư đối với tệp này. Nó không hiển thị với các tệp bên ngoài trong các tệp khác và bạn có thể có nhiều tệp khác nhau, tất cả đều khai báo static TYPE blah;
và tất cả chúng đều là khác nhau.
Đối với người thuần túy trong đối tượng: 'file' = đơn vị biên dịch.
Lưu ý rằng các chức năng bên trong tĩnh (không nằm trong phạm vi tệp) thậm chí còn được sắp xếp chặt chẽ hơn: nếu hai hàm khai báo static int bleh = 0;
ngay cả trong cùng một tệp, chúng không liên quan.
(*): đối với những người bạn không quen thuộc: trong mẫu thông thường, một đơn vị biên dịch phải xác định biến toàn cục và một số khác có thể tham chiếu. Nó 'sống' trong đơn vị biên dịch đó. Trong trường hợp (3), ở trên, không có tập tin (hoặc tất cả các tập tin) định nghĩa nó. Nếu hai tệp nói int blah = 0;
, trình liên kết sẽ khiếu nại nhiều định nghĩa. Nếu hai tệp cho biết int blah;
, trình liên kết vui vẻ tạo ra một đơn lẻ toàn cầu int
và làm cho tất cả mã đề cập đến nó.
những gì sau đó sẽ 'int n' được gọi là (trong phạm vi tệp), về mặt bộ nhớ lưu trữ? –
@bmargulies: Ở phạm vi tệp, ý của bạn là gì? Vì tại phạm vi hàm, một var tĩnh là một giá trị giữ lại giá trị của nó sau khi các hàm trả về, và ở phạm vi lớp, một thành viên tĩnh có một cá thể duy nhất có sẵn cho tất cả các đối tượng. – mingos
Làm rõ bằng bản chỉnh sửa, tôi tin tưởng. – bmargulies