Freigeben über


Compilerwarnung (Ebene 1) C4731

'zeiger' : Framepointer register 'register' modified by inline assembly code

Ein Framezeigerregister wurde geändert. Sie müssen das Register in Ihrem Inlineassemblyblock oder ihrer Framevariable (je nach geändertem Register) speichern und wiederherstellen, oder Ihr Code funktioniert möglicherweise nicht ordnungsgemäß.

Im folgenden Beispiel wird C4731 generiert:

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

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

EBP ist der Framepointer (FPO ist unzulässig) und wird geändert. Wenn p später darauf verwiesen wird, wird sie relativ zu EBP. Wurde jedoch EBP vom Code überschrieben, sodass das Programm nicht ordnungsgemäß funktioniert und sogar fehlerhaft ist.