C語言但中函數調用的幾個區別

首先,讓我們來分個類,調用方法分爲兩大類另加一個較特殊的__thiscall.

  第一類:__stdcall類 別名:WINAPI,CALLBACK,PASCAL。該類特點是:主調函數負責參數入棧,由函數本身負責棧的恢復。【編程軟件

  第二類:__cdecl類 別名:C/C++中默認調用方式,若你定義函數未指定函數調用約定(Calling Conventions),例如在VC6中下面兩個函數的調用約定是等價的:

  int max(int a, int b)

  {

  return a>b?a:b;

  }

  int __cdecl min(int a, int b)

  {

  return a<b?a:b;

  }

  該類調用約定的特點是:由主調函數負責參數入棧,並由主調函數負責線的恢復。

  第三類:__thiscall 該類比較特殊,只用於類成員函數調用,你甚至不能強制指定這個函數調用約定。它是由C/C++編譯器自動添加的。在C/C++中類成員函數會默認傳入一個this指針,對於此,在默入情況下,C/C++中類成員函數通過此類調用約定來指定this指針。

  接着介紹一下__thiscall,__thiscall是關於類的一種調用方式。

  它與其他調用方式的最大區別是:

  __thiscall對每個函數都增加了一個類指針參數

  class aa

  {

  void bb(int cc);

  };

  實際上bb的函數原形是void bb(aa &this, int cc);

  __cdecl的調用方式介紹: C和C++缺省調用方式

轉載請註明,本文出自:http://korey.blog.51cto.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章