Compiler Warning (Level 1) C4731
'pointer' : frame pointer register 'register' dimodifikasi oleh kode assembly sebaris
Register penunjuk bingkai dimodifikasi. Anda harus menyimpan dan memulihkan register di blok rakitan sebaris atau variabel bingkai (lokal atau parameter, tergantung pada register yang dimodifikasi), atau kode Anda mungkin tidak berfungsi dengan baik.
Sampel berikut menghasilkan C4731:
// C4731.cpp
// compile with: /W1 /LD
// processor: x86
// C4731 expected
void bad(int p) {
__asm
{
mov ebp, 1
}
if (p == 1)
{
// ...
}
}
EBP adalah penunjuk bingkai (FPO tidak diizinkan) dan sedang dimodifikasi. Ketika p
kemudian dirujuk, itu dirujuk relatif terhadap EBP
. Tetapi EBP
telah ditimpa oleh kode, sehingga program tidak akan berfungsi dengan baik dan bahkan mungkin salah.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk