여기에서 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을 사용할 수 있습니다.
제한 한정자 키워드를 사용하십시오. 이는 포인터 제한 키워드로 별칭이 지정되지 않은 것을 컴파일러에 약속한다는 것을 나타냅니다. 약속을 어기면 몇 가지 문제가 발생합니다.