ตัวคุณสมบัติชนิดข้อมูล (Type Qualifiers) เพิ่มแอตทริบิวต์พิเศษให้กับชนิดข้อมูลที่มีอยู่ในภาษา C

มีตัวคุณสมบัติ 3 ตัวในภาษา C volatile และ restrict อธิบายด้านล่าง:
Volatile
ตัวคุณสมบัติ volatile ใช้บอกคอมไพเลอร์ว่าตัวแปรนั้นถูกแบ่งปัน นั่นคือ ตัวแปรอาจถูกอ้างอิงและเปลี่ยนแปลงโดยโปรแกรมอื่น (หรือ)เอนทิตีอื่น หากประกาศเป็น volatile
ตัวอย่าง: volatile int x;
Restrict
ใช้กับพอยน์เตอร์เท่านั้น บ่งชี้ว่าพอยน์เตอร์เป็นวิธีเดียวที่จะเข้าถึงข้อมูลที่ชี้ไป ช่วยให้คอมไพเลอร์เพิ่มประสิทธิภาพ (Optimization) ได้ดีขึ้น
โปรแกรมตัวอย่าง
โปรแกรม C สำหรับ volatile type qualifier:
int *ptr
int a = 0;
ptr = &a;
____
____
____
*ptr += 4; // ไม่สามารถแทนที่ด้วย *ptr += 9 ได้
____
____
____
*ptr += 5;ที่นี่ คอมไพเลอร์ไม่สามารถแทนที่สองคำสั่ง *ptr+=4 และ *ptr+=5 ด้วยคำสั่งเดียว *ptr+=9 ได้ เพราะไม่ชัดเจนว่าตัวแปร 'a' สามารถเข้าถึงโดยตรง (หรือ) ผ่านพอยน์เตอร์อื่นได้
ตัวอย่าง:
restrict int *ptr
int a = 0;
ptr = &a;
____
____
____
*ptr += 4; // สามารถแทนที่ด้วย *ptr += 9 ได้
____
____
____
*ptr += 5; ____ ____ที่นี่ คอมไพเลอร์สามารถแทนที่สองคำสั่งด้วยคำสั่งเดียว *ptr+=9 ได้ เพราะมั่นใจว่าตัวแปรไม่สามารถเข้าถึงผ่านทรัพยากรอื่นได้
ตัวอย่าง
โปรแกรม C สำหรับการใช้คีย์เวิร์ด restrict:
#include <stdio.h>
void keyword(int* a, int* b, int* restrict c) {
*a += *c;
// เนื่องจาก c เป็น restrict คอมไพเลอร์จะ
// ไม่โหลดค่าที่ที่อยู่ c ใหม่ใน
// รหัสแอสเซมบลี
*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;
}ผลลัพธ์
เมื่อรันโปรแกรม จะได้ผลลัพธ์ดังนี้:
40 50 30