Delen via


Compilerwaarschuwing (niveau 1) C4731

'pointer': framepointer register 'register' gewijzigd door inline assemblycode

Opmerkingen

Er is een framepointerregister gewijzigd. U moet het register opslaan en herstellen in uw inline assemblyblok of framevariabele (lokaal of parameter, afhankelijk van het gewijzigde register) of uw code werkt mogelijk niet goed.

Example

In het volgende voorbeeld wordt C4731 gegenereerd:

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

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

EBP is de framepointer (FPO is niet toegestaan) en wordt gewijzigd. Wanneer p er later naar wordt verwezen, wordt ernaar verwezen ten opzichte EBPvan . Maar EBP is overschreven door de code, dus het programma werkt niet goed en kan zelfs fouten.