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

เหตุใดจึงต้องมีนามแฝงที่เข้มงวดใน C


เราจะมาดูกันว่าทำไมเราจึงควรใช้นามแฝงที่เข้มงวดใน 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

ใช้คีย์เวิร์ดจำกัดตัวระบุ เป็นการบ่งชี้ว่าเราให้คำมั่นสัญญากับคอมไพเลอร์ว่ามีบางสิ่งที่ไม่ได้ใช้นามแฝงกับคีย์เวิร์ดจำกัดตัวชี้ หากเราผิดสัญญาก็จะมีปัญหาบางอย่าง