- Static biến cục bộ
Bên trong một hàm
-
Thay đổi thời gian sống của biến: Thay vì bị hủy đi khi hàm kết thúc (như biến cục bộ thông thường nằm trên Stack), biến
staticcục bộ được lưu ở vùng nhớ cấp phát tĩnh (vùng.datahoặc.bsstrên RAM) và tồn tại trong suốt vòng đời của chương trình. Nó chỉ được khởi tạo đúng 1 lần duy nhất trong lần chạy đầu tiên.
Ứng dụng: Dùng để lưu trạng thái giữa các lần gọi hàm
void count_calls() {
static int count = 0; // Chỉ khởi tạo lần đầu
count++;
printf("Hàm được gọi %d lần\n", count);
}
2. static biến toàn cục
-
Bên ngoài tất cả các hàm.
-
Giới hạn phạm vi truy cập.
-
Biến này vẫn tồn tại suốt chương trình (nằm ở
.datahoặc.bss), nhưng nó chỉ có thể được nhìn thấy và sử dụng bên trong file.c(translation unit) khai báo nó. Các file.ckhác không thể dùng từ khóaexternđể lấy biến này ra dùng. -
Ứng dụng: Đây là cách để thực hiện Tính đóng gói (Encapsulation) trong C. Trong lập trình nhúng, khi viết một file thư viện (ví dụ
motor_driver.c), bạn dùngstaticcho các biến trạng thái nội bộ để ngăn chặn việc các module khác vô tình hoặc cố ý can thiệp làm sai lệch trạng thái của động cơ.
3. static hàm (Static Function)
-
Đứng trước định nghĩa hàm.
-
Giới hạn phạm vi truy cập
-
Hàm này chỉ có thể được gọi bởi các hàm khác nằm trong cùng một file
.c. Nó không được "export" ra ngoài để các module khác gọi. -
Ứng dụng: Dùng để viết các hàm private helper (hàm hỗ trợ nội bộ). Điều này giúp bảng symbol table của trình biên dịch gọn gàng hơn và tránh xung đột tên hàm (naming collision) khi ghép nối dự án lớn.