Advertencia del compilador (nivel 1) C4731
"pointer": registro de puntero de marco "register" modificado por código de ensamblado insertado
Se modificó un registro de puntero de marco. Debe guardar y restaurar el registro en el bloque de ensamblado insertado o la variable de marco (local o parámetro, según el registro modificado) o es posible que el código no funcione correctamente.
El ejemplo siguiente genera la advertencia C4731:
// C4731.cpp
// compile with: /W1 /LD
// processor: x86
// C4731 expected
void bad(int p) {
__asm
{
mov ebp, 1
}
if (p == 1)
{
// ...
}
}
EBP es el puntero de marco (no está permitido FPO) y se está modificando. Cuando se hace referencia a p
más adelante, se hace referencia a él con respecto a EBP
. Pero el código sobrescribió EBP
, por lo que el programa no funcionará correctamente e, incluso, puede generar un error.