共用方式為


規則與限制 Naked 函式

Microsoft 專有的

下列規則和限制套用於 naked 函式:

  • return陳述式不被允許。

  • 結構化例外處理和 C++ 例外處理建構不會受到允許,因為它們必須回溯堆疊框架上。

  • 同樣地,也就是任何形式的setjmp反之則禁止使用。

  • 使用**_alloca**函式禁止。

  • 若要確保本機變數未初始化程式碼會出現在初構序列之前,在函式範圍內不允許初始化的區域變數。 特別是,C++ 物件的宣告不允許在函式的範圍。 可能,不過,有初始化的資料中巢狀的範圍內。

  • 不建議框架指標最佳化 (/Oy 編譯器選項),但它會自動隱藏 naked 函式。

  • 您不能宣告在函式的語彙範圍的 C++ 類別物件。 您可以,不過,宣告巢狀區塊中的物件。

  • naked關鍵字會被忽略,以編譯時 /clr

  • 對於 __fastcall naked 函式,只要在其中一個暫存器引數的 C/C++ 程式碼中參考,初構程式碼應該儲存到該變數的堆疊位置該暫存器的值。 例如:

// nkdfastcl.cpp
// compile with: /c
// processor: x86
__declspec(naked) int __fastcall  power(int i, int j) {
   // calculates i^j, assumes that j >= 0

   // prolog
   __asm {
      push ebp
      mov ebp, esp
      sub esp, __LOCAL_SIZE
     // store ECX and EDX into stack locations allocated for i and j
     mov i, ecx
     mov j, edx
   }

   {
      int k = 1;   // return value
      while (j-- > 0) 
         k *= i;
      __asm { 
         mov eax, k 
      };
   }

   // epilog
   __asm {
      mov esp, ebp
      pop ebp
      ret
   }
}

請參閱

參考

Naked 函式呼叫