ที่นี่เราจะดูว่าทำไมควรใช้ strict aliasing ใน C ก่อนจะอภิปราย ให้ดูโค้ดและวิเคราะห์ผลลัพธ์
ตัวอย่าง
#include<stdio.h> int temp = 5; int* var = &temp; int my_function(double* var) { temp = 1; *var = 5.10; // นี้จะเปลี่ยนค่า temp return temp; } main() { printf("%d", my_function((double*)&temp)); }ผลลัพธ์
1717986918
ถ้าเรียก my_function() ปกติ จะคืนค่า 1 แต่ถ้าเรียก my_function((double*)&temp) ควรคืนค่า 1 แต่กลับคืนค่าอื่น เพราะการ aliasing ทำให้ค่า temp ถูกเปลี่ยนแปลงโดย *var = 5.10 เพื่อแก้ไข ใช้ Strict Aliasing
ใช้ restrict qualifier บอก compiler ว่าพอยน์เตอร์นี้ไม่ alias กับอะไร ถ้าละเลย promise จะมีปัญหา