다음을 통해 공유


컴파일러 경고(수준 1) C4731

'pointer': 인라인 어셈블리 코드에 의해 수정된 프레임 포인터 레지스터 'register'

프레임 포인터 레지스터가 수정되었습니다. 인라인 어셈블리 블록 또는 프레임 변수(수정된 레지스터에 따라 로컬 또는 매개 변수)에 레지스터를 저장하고 복원해야 합니다. 그렇지 않으면 코드가 제대로 작동하지 않을 수 있습니다.

다음 샘플에서는 C4731을 생성합니다.

// C4731.cpp
// compile with: /W1 /LD
// processor: x86
// C4731 expected
void bad(int p) {
   __asm
   {
      mov ebp, 1
   }

   if (p == 1)
   {
      // ...
   }
}

EBP는 프레임 포인터(FPO가 허용되지 않음)이며 수정 중입니다. 나중에 참조될 때 p 는 .를 EBP기준으로 참조됩니다. 그러나 EBP 코드에 의해 덮어쓰여졌으므로 프로그램이 제대로 작동하지 않고 오류가 발생할 수도 있습니다.