Trong bài  – Biến cục bộ, chúng ta đã trình bày rằng biến cục bộ là các biến được định nghĩa bên trong một hàm (hoặc các tham số của hàm). Các biến cục bộ có phạm vi khối (chỉ hiển thị trong khối mà chúng được khai báo) và có thời lượng tự động (chúng được tạo tại điểm xác định và bị hủy khi khối được thoát).

Trong C ++, các biến cũng có thể được khai báo bên ngoài một hàm. Các biến như vậy được gọi là biến toàn cục.

1. Khai báo và đặt tên cho các biến toàn cục

Theo quy ước, các biến toàn cục được khai báo ở đầu file, bên dưới phần bao gồm, nhưng bên trên bất kỳ code nào. Dưới đây là một ví dụ về một biến toàn cục đang được khai báo:

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

#include <iostream>
 
// Variables declared outside of a function are global variables
int g_x {}; // global variable g_x
 
void doSomething()
{
    // global variables can be seen and used everywhere in the file
    g_x = 3;
    std::cout << g_x << '\n';
}
 
int main()
{
    doSomething();
    std::cout << g_x << '\n';
 
    // global variables can be seen and used everywhere in the file
    g_x = 5;
    std::cout << g_x << '\n';
 
    return 0;
}
// g_x goes out of scope here

Kết quả

3
3
5

Theo quy ước, nhiều developer đặt tiền tố định danh biến toàn cầu bằng “g” hoặc “g_” để cho biết rằng chúng là toàn cầu.

Bạn nênCân nhắc sử dụng tiền tố “g” hoặc “g_” cho các biến toàn cục để giúp phân biệt chúng với các biến cục bộ.

2. Các biến toàn cục có phạm vi file và tĩnh

Các biến toàn cục có phạm vi file (còn được gọi không chính thức là phạm vi toàn cục hoặc phạm vi không gian tên toàn cầu), có nghĩa là chúng có thể nhìn thấy từ điểm khai báo cho đến khi kết thúc file mà chúng được khai báo. Sau khi được khai báo, một biến toàn cục có thể được sử dụng ở bất kỳ đâu trong file từ thời điểm đó trở đi! Trong ví dụ trên, biến toàn cục g_x được sử dụng trong cả hai hàm doSomething () và main ().

Bởi vì chúng được định nghĩa bên ngoài một hàm, các biến toàn cục được coi là một phần của không gian tên chung (do đó có thuật ngữ “phạm vi không gian tên chung”).

Các biến toàn cục được tạo khi chương trình bắt đầu và bị hủy khi chương trình kết thúc. Đây được gọi là thời lượng tĩnh. Các biến có static đôi khi được gọi là biến tĩnh.

Không giống như các biến cục bộ, không được khởi tạo theo mặc định, các biến tĩnh(static) được khởi tạo bằng 0 theo mặc định.

3. Khởi tạo biến toàn cục

Các biến toàn cục không phải hằng số có thể được khởi tạo tùy chọn:

int g_x; // no explicit initializer (zero-initialized by default)
int g_y {}; // zero initialized
int g_z { 1 }; // initialized with value

4. Các biến toàn cầu không đổi

Cũng giống như các biến cục bộ, các biến toàn cục có thể không đổi. Như với tất cả các hằng số, các biến toàn cục hằng số phải được khởi tạo.

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

#include <iostream>
 
const int g_x; // error: constant variables must be initialized
constexpr int g_w; // error: constant variables must be initialized
 
const int g_y { 1 };  // const global variable g_y, initialized with a value
constexpr int g_z { 2 }; // constexpr global variable g_z, initialized with a value
 
void doSomething()
{
    // global variables can be seen and used everywhere in the file
    std::cout << g_y << '\n';
    std::cout << g_z << '\n';
}
 
int main()
{
    doSomething();
 
    // global variables can be seen and used everywhere in the file
    std::cout << g_y << '\n';
    std::cout << g_z << '\n';
 
    return 0;
}
// g_y and g_z goes out of scope here

Một lời cảnh báo về các biến toàn cục (không cố định)

Các lập trình viên mới thường bị cám dỗ để sử dụng nhiều biến toàn cục, vì chúng có thể được sử dụng mà không cần phải chuyển chúng một cách rõ ràng cho mọi hàm cần chúng. Tuy nhiên, thường nên tránh hoàn toàn việc sử dụng các biến toàn cục không cố định! Chúng ta sẽ thảo luận lý do tại sao trong một vài bài học.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!