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

Giải thích các định tính loại dễ bay hơi và hạn chế trong C bằng một ví dụ

Bộ định tính loại thêm các thuộc tính đặc biệt cho các kiểu dữ liệu hiện có trong ngôn ngữ lập trình C.

Giải thích các định tính loại dễ bay hơi và hạn chế trong C bằng một ví dụ

Có ba bộ định tính loại trong ngôn ngữ C và bộ định loại loại dễ bay hơi và hạn chế được giải thích bên dưới -

Dễ bay hơi

Một bộ định tính kiểu biến động được sử dụng để cho trình biên dịch biết rằng một biến được chia sẻ. Nghĩa là, một biến có thể được tham chiếu và thay đổi bởi các chương trình (hoặc) thực thể khác nếu nó được khai báo là biến động.

Ví dụ, biến int x;

Hạn chế

Điều này chỉ được sử dụng với con trỏ. Nó chỉ ra rằng con trỏ chỉ là một cách ban đầu để truy cập vào dữ liệu khác biệt. Nó cung cấp thêm trợ giúp cho trình biên dịch để tối ưu hóa.

Chương trình mẫu

Sau đây là chương trình C cho bộ định tính loại biến động -

   int *ptr
   int a= 0;
   ptr = &a;
   ____
   ____
   ____
      *ptr+=4; // Cannot be replaced with *ptr+=9
   ____
   ____
   ____
      *ptr+=5;

Ở đây, trình biên dịch không thể thay thế hai câu lệnh * ptr + =4 và * ptr + =5 bằng một câu lệnh * ptr + =9. Bởi vì, không rõ biến ‘a’ có thể được truy cập trực tiếp (hoặc) thông qua các con trỏ khác hay không.

Ví dụ:

   restrict int *ptr
   int a= 0;
   ptr = &a;
   ____
   ____
   ____
      *ptr+=4; // Can be replaced with *ptr+=9
   ____
   ____
      *ptr+=5;
____
   ____

Ở đây, trình biên dịch có thể thay thế hai câu lệnh bằng một câu lệnh, * ptr + =9. Bởi vì, chắc chắn rằng biến đó không thể được truy cập thông qua bất kỳ tài nguyên nào khác.

Ví dụ

Sau đây là chương trình C để sử dụng từ khóa hạn chế -

Từ khóa
#include<stdio.h>
void keyword(int* a, int* b, int* restrict c){
   *a += *c;
   // Since c is restrict, compiler will
   // not reload value at address c in
   // its assembly code.
   *b += *c;
}
int main(void){
   int p = 10, q = 20,r=30;
   keyword(&p, &q,&r);
   printf("%d %d %d", p, q,r);
   return 0;
}

Đầu ra

Khi chương trình trên được thực thi, nó tạo ra kết quả sau -

40 50 30