Trong C, khi 1 biến đi sau từ khóa “extern” có nghĩa là:
- Nó là tham chiếu của một biến,hàm cùng tên nào đó, đã được định nghĩa bên ngoài. Nó chỉ khai báo chứ không định nghĩa ( cấp phát bộ nhớ cho biến ).
- Biến được tham chiếu phải được khai báo ở cấp độ cao nhất (toàn cục), và có thể nằm trong một file khá
- Nó là tham chiếu của một biến,hàm cùng tên nào đó, đã được định nghĩa bên ngoài. Nó chỉ khai báo chứ không định nghĩa ( cấp phát bộ nhớ cho biến ).
- Biến được tham chiếu phải được khai báo ở cấp độ cao nhất (toàn cục), và có thể nằm trong một file khá
Trong C, một chương trình lớn có thể được chia thành các module nhỏ hơn, các module này có thể được biên dịch riêng lẻ và được liên kết lại với nhau. Điều này được thực hiện nhằm tăng tốc độ quá trình biên dịch các chương trình lớn. Tuy nhiên, khi các module được liên kết, các tập tin phải được chương trình thông báo cho biết về các biến toàn cục được yêu cầu. Một biến toàn cục chỉ có thể được khai báo một lần. Nếu hai biến toàn cục có cùng tên được khai báo trong cùng một tập tin, một thông điệp lỗi ‘duplicate variable name’ (tên biến trùng) có thể được hiển thị hoặc đơn giản trình biên dịch C chọn một biến khác. Một lỗi tương tự xảy ra nếu tất cả các biến toàn cục được yêu cầu bởi chương trình chứa trong mỗi tập tin. Mặc dù trình biên dịch không đưa ra bất kỳ một thông báo lỗi nào trong khi biên dịch, nhưng sự thật các bản sao của cùng một biến đang được tạo ra. Tại thời điểm liên kết các tập tin, bộ liên kết sẽ hiển thị một thông báo lỗi như sau ‘duplicate label’ (nhãn trùng nhau) vì nó không biết sử dụng biến nào. Lớp extern được dùng trong trường hợp này. Tất cả các biến toàn cục được khai báo trong một tập tin và các biến giống nhau được khai báo là ở ngoài trong tất cả các tập tin. Xem đoạn mã lệnh sau:
File 1:
int GlobalVariable; // implicit definition
void SomeFunction(); // function prototype (declaration)
int main() {
GlobalVariable = 1;
SomeFunction();
return 0;
}
File 2:
extern int GlobalVariable; // explicit declaration
void SomeFunction() {// function header (definition)
++GlobalVariable;
}
File2 có các biến toàn cục giống như File1, ngoại trừ một điểm là các biến này có từ khóa extern được thêm vào sự khai báo của chúng. Từ khóa này nói với trình biên dịch là tên và kiểu của biến toàn cục được sử dụng mà không cần phải tạo lại sự lưu trữ cho chúng. Khi hai module được liên kết, các tham chiếu đến các biến ngoại được giải quyết.
0 nhận xét:
Đăng nhận xét