Computer >> Máy Tính >  >> Lập trình >> lập trình C

Các lớp lưu trữ trong chương trình C

Các biến và kiểu dữ liệu được thảo luận ở trên. Bây giờ chúng ta sẽ xem cách các biến có thể được phân loại theo phạm vi và khả năng hiển thị của nó.

Phạm vi:Nói chung, phạm vi là một thuật ngữ biểu thị thời gian tồn tại của một biến. Nó sẽ hoạt động trong bao lâu và khi nào nó sẽ bị phá hủy.

Khả năng hiển thị :Khả năng hiển thị hiển thị từ đâu biến có thể nhìn thấy, chúng ta có thể sử dụng các biến ở đâu. như một ví dụ nếu chúng tôi sử dụng các biến cục bộ, chúng tôi không thể sử dụng nó từ các hàm hoặc tệp khác, vì vậy nó chỉ hiển thị bên trong khối.

Chặn :Khối được định nghĩa là tập hợp các dòng giữa hai dấu ngoặc nhọn {…}. như ví dụ

{
   //line1
   //line2
   //line3
}

Đây là một khối.

Lớp lưu trữ Đã khai báo như thế nào Phạm vi Mức độ hiển thị
auto Trên toàn cầu

auto Cục bộ Khối Khối
đăng ký Trên toàn cầu

đăng ký Cục bộ Khối Khối
static Trên toàn cầu Chương trình Tệp
static Cục bộ Chương trình Khối
extern Trên toàn cầu Chương trình Chương trình
extern Cục bộ Chương trình Khối

Cú pháp cơ bản cho lớp lưu trữ:

<storage class> <datatype> variable_name;
ex. static int my_var = 0;

Lưu ý:Nếu chúng ta sử dụng như tên_biến; mà không chỉ định bất kỳ lớp lưu trữ nào, nó sẽ tự động là lớp lưu trữ ‘auto’.

Tự động:Lớp lưu trữ tự động là lớp lưu trữ mặc định cho tất cả các biến cục bộ.

{
   int mount;
   auto int month;
}

Ví dụ trên định nghĩa hai biến trong cùng một lớp lưu trữ. 'auto' chỉ có thể được sử dụng trong các hàm, tức là các biến cục bộ.

Đăng ký :Lớp lưu trữ thanh ghi được sử dụng để xác định các biến cục bộ sẽ được lưu trữ trong thanh ghi thay vì RAM. Điều này có nghĩa là biến có kích thước tối đa bằng kích thước thanh ghi (thường là một từ) và không thể áp dụng toán tử '&' một ngôi cho nó (vì nó không có vị trí bộ nhớ).

{
   register int miles;
}

Thanh ghi chỉ nên được sử dụng cho các biến yêu cầu truy cập nhanh như bộ đếm. Cũng cần lưu ý rằng việc xác định 'thanh ghi' không có nghĩa là biến sẽ được lưu trữ trong một thanh ghi. Có nghĩa là nó CÓ THỂ được lưu trữ trong một sổ đăng ký tùy thuộc vào phần cứng và các hạn chế triển khai.

Tĩnh : tĩnh lớp lưu trữ hướng dẫn trình biên dịch giữ một biến cục bộ tồn tại trong suốt thời gian tồn tại của chương trình thay vì tạo và phá hủy nó mỗi khi nó đi vào và đi ra khỏi phạm vi. Do đó, việc làm cho các biến cục bộ trở nên tĩnh cho phép chúng duy trì các giá trị của chúng giữa các lần gọi hàm.

Công cụ sửa đổi tĩnh cũng có thể được áp dụng cho các biến toàn cục. Khi điều này được thực hiện, nó khiến phạm vi của biến đó bị hạn chế đối với tệp mà nó được khai báo.

Trong lập trình C, khi static được sử dụng trên một biến toàn cục, nó khiến chỉ một bản sao của thành viên đó được chia sẻ bởi tất cả các đối tượng trong lớp của nó.

Mã mẫu


Khai báo hàm
#include <stdio.h>
/* function declaration */
void func(void);
static int count = 5; /* global variable */
main() {
   while(count--) {
      func();
   }
   return 0;
}
/* function definition */
void func( void ) {
   static int i = 5; /* local static variable */
   i++;
   printf("i is %d and count is %d\n", i, count);
}

Đầu ra

i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

Bên ngoài :Lớp lưu trữ bên ngoài được sử dụng để cung cấp một tham chiếu của một biến toàn cục hiển thị cho TẤT CẢ các tệp chương trình. Tuy nhiên, khi bạn sử dụng 'extern', biến không thể được khởi tạo, nó trỏ tên biến tại vị trí lưu trữ đã được xác định trước đó.

Khi bạn có nhiều tệp và bạn xác định một biến hoặc hàm toàn cục, biến đó cũng sẽ được sử dụng trong các tệp khác, thì extern sẽ được sử dụng trong một tệp khác để cung cấp tham chiếu của biến hoặc hàm đã xác định. Để hiểu rõ, extern được sử dụng để khai báo một biến hoặc hàm toàn cục trong một tệp khác.

Công cụ sửa đổi bên ngoài thường được sử dụng nhất khi có hai hoặc nhiều tệp chia sẻ cùng các biến hoặc hàm toàn cục như được giải thích bên dưới.

Mã mẫu (main.c):

#include <stdio.h>
int count ;
extern void write_extern();
main() {
count = 5;
write_extern();
}
Example Code (support.c):
#include <stdio.h>
extern int count;
void write_extern(void) {
printf("count is %d\n", count);
}

Đầu ra

Số lượng
count is 5