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

ทำไมต้องใช้ Strict Aliasing ใน C


ที่นี่เราจะดูว่าทำไมควรใช้ 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 จะมีปัญหา