stdcalll 呼叫約定說明符

2021-06-22 15:05:49 字數 813 閱讀 5079

函式呼叫過程中,主調函式和被調函式之間需要使用堆疊作為中間緩衝來傳遞引數,為保證引數傳遞順序的正確性,必須對引數的入棧出棧順序進行約定,常用的有__stdcall__cdecl。在定義乙個函式時,應該在函式名之前,返回型別之後使用呼叫約定說明符對這個函式所採用的呼叫約定進行說明。

不同開發環境的編譯器都有自己的預設呼叫約定,如visual c++預設的函式呼叫約定為__cdecl,所以呼叫定義為__cdecl的庫函式時,可以不做任何說明。然而,win32 api函式都遵循__stdcall呼叫約定,因此在預設函式呼叫約定為__cdecl的visual c++開發環境中,呼叫win32 ap函式必須在函式名前顯式地加上__stdcall。

在windows中,很喜歡定義別名,__stdcall被定義了許多的別名:

#define winapi__stdcall

#define callback__stdcall

#define cv_stdcall__stdcall // opencv1.0原始碼中的定義

下面是opencv1.0原始碼中乙個函式的定義,使用了cv_stdcall呼叫約定,其中cv_stdcall是__stdcall的別名。

參考資料

《mfc windows應用程式設計(第3版)》p14

轉換說明符

a a 浮點數 十六進製制數字和p p 記數法 c99 c 字元 d 有符號十進位制整數 f 浮點數 包括float和doulbe e e 浮點數指數輸出 e e 記數法 g g 浮點數不顯無意義的零 0 i 有符號十進位制整數 與 d相同 u 無符號十進位制整數 o 八進位制整數 e.g.0123...

類的訪問說明符和派生訪問說明符

兩個名詞 直接基類 出現在派生列表中 間接基類 由派生類通過其直接基類繼承而來 兩個訪問說明符 類的訪問說明符限制直接基類的類成員訪問形式 派生訪問說明符限制間接基類的類成員訪問形式 類的訪問說明符 public,private,protected private表示私有成員,只有該類的成員函式可以...

DebugPrint 格式說明符

1 直接列印字串。dbgprint hello world 2 空結尾的字串,你可以用普通得c 語法表示字串常量 char variable string hello world dbgprint s variable string 3 空結尾的寬字串 wchar 型別 wchar string w...