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.
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