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을 사용할 수 있습니다.

제한 한정자 키워드를 사용하십시오. 이는 포인터 제한 키워드로 별칭이 지정되지 않은 것을 컴파일러에 약속한다는 것을 나타냅니다. 약속을 어기면 몇 가지 문제가 발생합니다.