Avviso del compilatore (livello 1) C4731

'pointer': registro del puntatore frame 'register' modificato dal codice assembly inline

È stato modificato un registro dei puntatori a fotogrammi. È necessario salvare e ripristinare il registro nel blocco di assembly inline o nella variabile frame (locale o parametro, a seconda del registro modificato) oppure il codice potrebbe non funzionare correttamente.

L'esempio seguente genera l'errore C4731:

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

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

EBP è il puntatore al fotogramma (FPO non consentito) e viene modificato. Quando p viene fatto riferimento in un secondo momento, viene fatto riferimento a relativo a EBP. Ma EBP è stato sovrascritto dal codice, quindi il programma non funzionerà correttamente e potrebbe anche errori.