C28753
경고 C28753: 매개 변수의 정의되지 않은 평가 순서에 의존
C/C++를 사용하면 컴파일러가 임의의 순서로 실제 매개 변수를 평가하는 코드를 생성할 수 있으며 x86 및 Arm 컴파일러는 다른 순서를 선택하는 경향이 있습니다. 특정 순서를 사용하는 코드는 다른 플랫폼에서 다르게 동작할 수 있습니다.
일반적인 실수는 다음과 같은 호출에서 연산자 주소& 부작용이 있는 스마트 포인터를 사용하는 것입니다.
sp->Foo(&sp);
멤버 액세스 연산자 및> 연산자 & 호출은 어느 순서로든 발생할 수 있습니다. 따라서 연산자 & 부작용이 연산자 전후에 발생할 수 있습니다. 가> 호출됩니다. 이 경고는 플랫폼 간에 다른 동작을 방지하기 위해 이러한 버그 호출을 찾습니다.
예제
다음 코드 예제에서는 이 경고를 생성합니다.
sp->Foo(&sp)
다음 코드 예제에서는 이 경고를 방지합니다.
SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;