Upozornění kompilátoru (úroveň 1) C4731
'pointer' : frame pointer register 'register' modified by inline assembly code
Registr ukazatele rámce byl změněn. Je nutné uložit a obnovit registr ve vložené blok sestavení nebo proměnné rámce (místní nebo parametr v závislosti na upraveném registru) nebo váš kód nemusí správně fungovat.
Následující ukázka vygeneruje C4731:
// C4731.cpp
// compile with: /W1 /LD
// processor: x86
// C4731 expected
void bad(int p) {
__asm
{
mov ebp, 1
}
if (p == 1)
{
// ...
}
}
EBP je ukazatel rámce (FPO je zakázán) a upravuje se. Pokud p
je později odkazován, je odkazován vzhledem k EBP
. Kód ale EBP
přepsal, takže program nebude správně fungovat a může dokonce i chybovat.