C言語ならママに聞け
■ このスレッドは過去ログ倉庫に格納されています
0024デフォルトの名無しさん
NGNG関数の呼び出し方法の1種で、他に__cdecl(デフォルト)、__fastcall __pascal __thiscallなんかがある。
興味がなかったら後は読み飛ばして。
__cdecl
何も指定しないとコレになる。引数は右側のものから置く。
関数を呼び出した側が引数のメモリの開放を行うので可変個引数が扱える。
__pascal
関数自体が引数のメモリの開放を行うので、__cdeclよりやや実行ファイルのサイズが小さくなる。
しかし関数名は全て大文字に変換されてしまう。これだけ引数を左側のものから置いていく。
__stdcallが無い時代のWinAPIに使われていた。
__stdcall
__pascalの同様に引数が置かれているメモリの開放を自分自身で(呼ばれた側の関数で)行うので、
これも__cdeclよりやや実行ファイルのサイズが小さくなる。
しかし__pascalと違い関数の大文字小文字はそのままなのでhogeとHOGEというような関数名でも混在できる。
他は__cdeclと同じく引数は右側のものから置く。
__fastcall
__stdcallの機能に加え引数の1部をレジスタに置くので__stdcallよりも早くなる可能性がある。けどなぜか使われていない。
__thiscal
(C++)クラスのメンバ関数用なんで好き勝手に指定するものではない。__stdcallに加えthisポインタをレジスタに置く。
可変個引数の場合、__cdeclに加え最後にthisポインタを置く。
ちなみに__stdcallがなかった頃は#define PASCAL __pascalとなっていたが、
今は#define PASCAL __stdcallとなっているので注意。
■ このスレッドは過去ログ倉庫に格納されています