Phạm vi cục bộ và toàn cục
Mọi thứ được định nghĩa ở mức phạm vi chương trình (nghĩa là bên ngoài các hàm và các lớp) được hiếu là có một phạm vi toàn cục (global scope). Các hàm ví dụ mà chúng ta đã thấy cho đến thòi điếm này đều có một phạm vi toàn cục. Các biến cũng có thề định nghĩa ở phạm vi toàn cục:
int year = 1993; // Biến toàn cục
int Max(int, int); // Hàm tòan cục
main(void) // Hàm toàn cục
{
// Chương trình chính
}
Các biến toàn cục không được khởi tạo, sẽ được khởi tạo tự động là 0. Vì các đầu vào toàn cục là có thể thấy được ở mức chương trình nên chúng cũng phải là duy nhất ở mức chương trình. Điều này nghĩa là cùng các biến hoặc hàm toàn cục có thế không được định nghĩa nhiều hơn một lần ở mức toàn cục. (Tuy nliiên chúng ta sẽ thấy sau này một tên hàm có thế được sử dụng lại). Thông thường các biến hay hàm toàn cục có thế được truy xuất từ mọi nơi trong chương trình.
Mồi khối trong một chương trình định nghĩa một phạm vi cục bộ. Thật vậy, thân của một hàm trình bày một phạm vi cục bộ. Các tham số của một hàm có cùng phạm vi như là thân hàm. Các biến được định nghĩa ở bên trong một phạm vi cục bộ có thể nhìn thấy tới chỉ phạm vi đó. Do đó một biến chỉ cần là duy nhất ở trong phạm vi của chính nó. Các phạm vi cục bộ cí thế lồng nhau, trong trường hợp này các phạm vi bên trong chồng lên các phạm vi bên ngoài. Ví dụ trong đoạn mã sau:
int xyz; // xyz là biến toàn cục
void Foo(int xyz) // xyz là biến cục bộ của hàm Foo
{
if (xyz > 0)
{
double xyz; // xyz là biến cục bộ cho khối này
//...
}
}
Có ba phạm vi riêng biệt, mỗi phạm vi chứa đựng một xyz riêng.
Thông thường, thời gian sống của một biến bị giới hạn bởi phạm vi của nó. Vì thế, ví dụ các biến toàn cục tồn tại suốt thời gian thực hiện chương trình trong khi các biến cục bộ được tạo ra khi phạm vi của chúng bắt đầu và mất đi khi phạm vi của chúng kết thúc. Không gian bộ nhớ cho các biến toàn cục được dành riêng trước khi sự thực hiện của chương trinh bắt đầu nhưng ngược lại không gian bộ nhớ cho các biến cục bộ được cấp phát ở thời điếm thực hiện chương trình.