C6268
경고 C6268: (<TYPE1>)(<TYPE2>)x + y의 연산 순서가 잘못되었습니다.(<TYPE1>)((<TYPE2>)x + y)에서 괄호가 누락된 것 같습니다.
이 경고는 포인터 산술을 수행할 때 복잡한 캐스팅 식에 우선 순위 문제가 발생할 수 있음을 나타냅니다.캐스팅은 이진 연산자보다 더 밀접하게 그룹화되므로 프로그래머가 의도한 결과가 나오지 않을 수 있습니다.경우에 따라 이 오류로 인해 잘못된 동작이나 프로그램 충돌이 발생할 수 있습니다.
다음 식을 예로 듭니다.
(char *)p + offset
이 식에서 오프셋은 문자의 오프셋으로 해석됩니다. 하지만 다음과 같은 식은
(int *)(char *)p + offset
다음과 동일합니다.
((int *)(char *)p) + offset
따라서 오프셋은 정수의 오프셋으로 해석됩니다.즉, 다음과 동일합니다.
(int *)((char *)p + (offset * sizeof(int)))
위의 코드는 프로그래머가 의도하는 것이 아닐 가능성이 큽니다.
두 형식의 상대적 크기에 따라 버퍼 오버런이 발생할 수 있습니다.
예제
다음 코드에서는 이 경고를 발생시킵니다.
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)(char *)p + offset_in_bytes;
// code ...
}
이 경고를 해결하려면 다음 코드를 사용합니다.
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}