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.