เราจะมาดูกันว่าทำไมเราจึงควรใช้นามแฝงที่เข้มงวดใน C ก่อนที่จะพูดถึงส่วนนั้น ให้เราดูโค้ดหนึ่งตัวแล้วลองวิเคราะห์ผลลัพธ์
ตัวอย่าง
#include<stdio.h>
int temp = 5;
int* var = &temp;
int my_function(double* var) {
temp = 1;
*var = 5.10; //this will change the value of temp
return (temp);
}
main() {
printf("%d", my_function((double*)&temp));
} ผลลัพธ์
1717986918
หากเราเรียกใช้ฟังก์ชัน my_function มันจะคืนค่า 1 เราสามารถเรียกสิ่งนี้ได้โดยใช้ my_function((double*)&temp) นี่ควรจะส่งคืน 1 แต่ที่นี่เราจะเห็นว่านี่กำลังส่งคืนอย่างอื่น รหัสนี้ถูกสร้างขึ้นเพื่อคืนค่าคงที่ 1 เท่านั้น ในการแก้ไขปัญหานี้ เราใช้ Strict Aliasing
ใช้คีย์เวิร์ดจำกัดตัวระบุ เป็นการบ่งชี้ว่าเราให้คำมั่นสัญญากับคอมไพเลอร์ว่ามีบางสิ่งที่ไม่ได้ใช้นามแฝงกับคีย์เวิร์ดจำกัดตัวชี้ หากเราผิดสัญญาก็จะมีปัญหาบางอย่าง