Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1) C4731

"wskaźnik": wskaźnik ramki rejestru "register" zmodyfikowany przez wbudowany kod zestawu

Rejestr wskaźnika ramki został zmodyfikowany. Musisz zapisać i przywrócić rejestr w wbudowanym bloku zestawu lub zmiennej ramki (lokalna lub parametr, w zależności od zmodyfikowanego rejestru) lub kod może nie działać prawidłowo.

Poniższy przykład generuje C4731:

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

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

EBP to wskaźnik ramki (FPO jest niedozwolony) i jest modyfikowany. W p przypadku późniejszego przywołowania jest on przywołyyny względem EBPelementu . Ale EBP został zastąpiony przez kod, więc program nie będzie działał prawidłowo i może nawet spowodować błąd.