Theo tiêu chuẩn C:Bên ngoài, nội bộ và không có liên kết hoặc lý do tại sao điều này không hoạt động?
In the set of translation units and libraries that constitutes an entire program, each declaration of a particular identifier with external linkage denotes the same object or function. Within one translation unit, each declaration of an identifier with internal linkage denotes the same object or function. Each declaration of an identifier with no linkage denotes a unique entity.
Trong ví dụ của tôi, chúng tôi có ba tờ khai riêng biệt với mỗi dạng có một linkage.So khác nhau tại sao không làm việc này?
static int a; //a_Internal
int main(void) {
int a; //a_Local
{
extern int a; //a_External
}
return 0;
}
Lỗi:
In function 'main': Line 9: error: variable previously declared 'static' redeclared 'extern'
Tại sao biên dịch nhấn mạnh rằng tôi redeclaring thay vì cố gắng truy cập vào đối tượng bên ngoài trong tập tin khác?
hợp lệ C++ ví dụ để tham khảo:
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ả Clang và VC dường như sẽ ổn với ví dụ C của tôi; chỉ một số phiên bản của GCC (không phải tất cả) sản xuất lỗi nói trên.
Vì vậy, bạn đã đọc đoạn 2, tốt, bây giờ hãy thử đọc đoạn 6, sau đó đoạn 4, ngay cả sau đó, nếu bạn có câu hỏi, vui lòng quay lại . :) –
Với gcc bạn nhận được lỗi này, nhưng không phải với tiếng kêu. –
(Thực tế thú vị: Trong C++ đề cập đến mã này (như hợp lệ!) Trong ví dụ trong [basic.link]/6.) –