[basic.link]/6Không thể hiểu tuyên bố # 3 trong Ví dụ về [basic.link]/6 14
Tên của một chức năng khai báo trong phạm vi khối và tên của một biến số được khai báo bởi một phạm vi khối
extern
khai báo có liên kết. Nếu có một tuyên bố có thể hiển thị của một thực thể có liên kết có tên và loại , bỏ qua các thực thể được khai báo bên ngoài phạm vi không gian tên bên trong, khai báo phạm vi khối tuyên bố rằng cùng một thực thể và nhận được liên kết của tuyên bố trước đó . Nếu có nhiều pháp nhân phù hợp, chương trình là không đúng định dạng. Ngược lại, nếu không có thực thể phù hợp được tìm thấy, các đối tượng phạm vi khối nhận liên kết bên ngoài [Ví dụ:.static void f(); static int i = 0; // #1 void g() { extern void f(); // internal linkage int i; // #2 i has no linkage { extern void f(); // internal linkage extern int i; // #3 external linkage } }
Có ba đối tượng tên là
i
trong chương trình này. Đối tượng có liên kết nội bộ được giới thiệu bởi khai báo trong phạm vi toàn cầu (dòng # 1), đối tượng có thời lượng lưu trữ tự động và không có liên kết được giới thiệu bởi khai báo trên dòng # 2 và đối tượng có thời lượng lưu trữ tĩnh và liên kết bên ngoài tờ khai trên dòng số 3. Ví dụ -end]
Tôi có hai ý kiến về đoạn này:
- Các
static int i = 0;
khai trong phạm vi toàn cầu là không có thể nhìn thấy bên trong khối chứa khai báoextern int i;
(# 3). Do đó, chúng tôi chỉ có thể nói rằng tuyên bố sau này có liên kết bên ngoài, nghĩa là chúng tôi không thể liên kết nó với tuyên bố số 1. - Nếu không, nếu khai báo
static int i;
được xem là có thể nhìn thấy bằng đoạn văn, đoạn khai báo khối khai báo cùng một thực thể và nhận liên kết của khai báo trước đó, đó là liên kết nội bộ, và không liên kết bên ngoài, như đã nêu trong Ví dụ.
Tôi thiếu gì ở đây?