다음을 통해 공유


경고 C6395

%variable%에는 C++17 이전의 순서가 지정되지 않은 읽기 및/또는 쓰기가 있습니다. 언어 표준을 변경하면 코드의 동작이 변경될 수 있습니다.

설명

C++17은 특정 식의 평가 순서를 더 엄격하게 만들었습니다. MSVC가 호환되어 일부 식의 평가 순서가 변경되었습니다. 따라서 언어 버전을 변경하면 프로그램의 관찰 가능한 동작이 변경될 수 있습니다. 이 검사는 언어 버전 전환으로 인해 코드의 의미가 변경되는 몇 가지 사례를 진단합니다.

코드 분석 이름: EVAL_ORDER_CHANGE

예시

void foo(int* a, int i)
{
    a[++i] = i; // Warning: 'i' has unsequenced reads and/or writes before C++17; changing the language standard might change the behavior of the code
}

이 문제를 해결하려면 식의 나머지 부분과 부작용을 분리하여 평가 순서를 잘 정의합니다.

void foo(int* a, int i)
{
    ++i;
    a[i] = i; // No warning.
}