Avertissement du compilateur (niveau 1) C4731

'pointeur' : registre de pointeur frame 'register' modifié par le code d’assembly inline

Un registre de pointeurs d’images a été modifié. Vous devez enregistrer et restaurer le registre dans votre bloc d’assembly inline ou variable frame (local ou paramètre, selon le registre modifié), ou votre code peut ne pas fonctionner correctement.

L’exemple suivant génère l’erreur C4731 :

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

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

EBP est le pointeur d’image (FPO est interdit) et il est modifié. Quand p elle est référencée ultérieurement, elle est référencée par rapport à EBP. Mais EBP a été remplacé par le code, de sorte que le programme ne fonctionnera pas correctement et peut même être défectueux.