다음을 통해 공유


경고 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)))

프로그래머가 의도한 것이 아닐 수 있습니다.

두 형식의 상대적 크기에 따라 이 오프셋은 버퍼 오버런으로 이어질 수 있습니다.

코드 분석 이름: MISPARENTHESIZED_CASTS

예시

다음 코드는 이 경고를 생성합니다.

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 ...
}