경고 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 ...
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기