Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

คำอธิบายตัวคุณสมบัติชนิดข้อมูล volatile และ restrict ในภาษา C พร้อมตัวอย่าง


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

คำอธิบายตัวคุณสมบัติชนิดข้อมูล volatile และ restrict ในภาษา 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