Một lớp lưu trữ định nghĩa phạm vi (nhìn thấy được) và thời gian tồn tại của một biến hoặc/và các hàm trong chương trình C. Những đặc tả đi trước kiểu có thể được thay đổi.
Dưới đây là những lớp lưu trữ, có thể sử dụng trong chương trình C.
- auto
- register
- static
- extern
Lớp lưu trữ auto trong C
Lớp lưu trữ auto là lớp lưu trữ mặc định cho tất cả các biến cục bộ:
{
int diemthi;
auto int diemthi;
}
Ví dụ trên để định nghĩa hai biến trong cùng một lớp lưu trữ, auto có thể được sử dụng bên trong hàm, ví dụ biến cục bộ.
Lớp lưu trữ register trong C
Lớp lưu trữ register có thể được sử dụng để định nghĩa biến cục bộ và có thể được lưu trữ trong một vùng đăng ký thay vì RAM. Điều này nghĩa là biến này có cỡ tối đa tương đương với cỡ đăng ký.
{
register int hocphi;
}
Lớp lưu trữ register chỉ được sử dụng cho biến mà yêu cầu truy cập nhanh như bộ đếm. Chú ý rằng định nghĩa 'register' không đồng nghĩa với biến đó có thể lưu trữ trong một thanh ghi. Nó nghĩa là có thể lưu trữ trong thanh ghi phụ thuộc vào phần cứng và với các hạn chế nhất định.
Lớp lưu trữ static trong C
Lớp lưu trữ static hướng dẫn trình biên dịch giữ các giá trị biến cục bộ tồn tại trong thời gian sống của chương trình thay vì việc tạo ra và hủy nó mỗi lần chạy qua phạm vi đó. Do đó, tạo một biến cục bộ static cho phép chúng lưu trữ các giá trị với các hàm gọi.
Lớp static này có thể được áp dụng cho biến toàn cục. Khi việc này diễn ra, nó gây ra phạm vi của biến được giới hạn trong file mà nó khai báo.
Trong lập trình C, khi static được sử dụng ứng với lớp, nó dẫn đến chỉ có một bản copy của lớp khai báo được chia sẻ bởi tất cả các đối tượng sử dụng lớp này.
#include /* phan khai bao ham */ void ham(void); static int biendem = 4; /* day la bien toan cuc */ main() { while(biendem--) { ham(); } printf("===========================\n"); return 0; } /* phan dinh nghia ham */ void ham( void ) { static int i = 6; /* bien cuc bo static */ i++; printf("i co gia tri la %d va biendem co gia tri la %d\n", i, biendem); }
Bạn có thể chưa hiểu ví dụ này này bởi vì bạn có sử dụng biến toàn cục, sẽ được giới thiệu ở bài tới. Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Lớp lưu trữ extern trong C
Lóp lưu trữ extern được sử dụng để đưa tham chiếu đến các biến toàn cục mà được nhìn thấy bởi tất cả các file chương trình.
Khi bạn có nhiều file và bạn định nghĩa các biến cục bộ hoặc hàm, nó sẽ được sử dụng ở các file khác. Để hiểu vấn đề này, extern được sử dụng để khai báo biến toàn cục hoặc hàm ở file khác.
Từ khóa extern được sử dụng khi hai hoặc nhiều file chia sẻ chung một biến hoặc hàm như ví dụ dưới đây:
File đầu tiên: file1.c
#include
int biendem ;
extern void ham_extern();
main()
{
biendem = 5;
ham_extern();
}
File thứ 2: file2.c
#include
extern int biendem;
void ham_extern(void)
{
printf("biendem co gia tri la %d\n", biendem);
}
Tại đây, extern là từ khóa được sử dụng để khai báo biendem ở dòng thứ hai nơi nó được định nghĩa ở file thứ nhất, main.c . Bây giờ, nếu bạn đang sử dụng command prompt, bạn biên dịch 2 file như sau:
$gcc main.c support.c
Nó sẽ cung cấp chương trình thực thi a.out, khi chương trình này được chạy sẽ in ra kết quả sau đây:
5