編譯器警告 (層級 1) C4731
'pointer' :內嵌元件程式碼修改的框架指標暫存器 'register'
已修改框架指標暫存器。 您必須在內嵌元件區塊或框架變數中儲存並還原暫存器(本機或參數,視已修改的暫存器而定),否則您的程式碼可能無法正常運作。
下列範例會產生 C4731:
// C4731.cpp
// compile with: /W1 /LD
// processor: x86
// C4731 expected
void bad(int p) {
__asm
{
mov ebp, 1
}
if (p == 1)
{
// ...
}
}
EBP 是框架指標(不允許 FPO),而且正在修改。 稍後參考時 p
,會參考相對於 EBP
。 但 EBP
程式碼已覆寫,因此程式將無法正常運作,甚至可能會發生錯誤。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應