เราจะมาดูกันว่าทำไมเราจึงควรใช้นามแฝงที่เข้มงวดใน 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
ใช้คีย์เวิร์ดจำกัดตัวระบุ เป็นการบ่งชี้ว่าเราให้คำมั่นสัญญากับคอมไพเลอร์ว่ามีบางสิ่งที่ไม่ได้ใช้นามแฝงกับคีย์เวิร์ดจำกัดตัวชี้ หากเราผิดสัญญาก็จะมีปัญหาบางอย่าง