Notice : 内容無保証。禁無断転載。リンク自由。

2.3 補足

MS-C (6.0) での引数受渡し方法には次の 3種類があります。

(1) _cdecl (C呼びだし規約)
MS-C でのデフォルト。 にこにこCで説明した方法。 引数を可変個にすることができる。 関数呼びだし後のスタックの調整は、呼びだし側がやる。
(2) _pascal, _fortran (パスカル呼びだし規約)
パスカルでの呼びだし方法。 _cdecl とは引数のつみかたが逆になる。 引数の数は可変にできない。 _cdecl より、ちょっと経済的な呼びだし方。 関数呼びだし後のスタックの調整は、呼び出された側がやる。
(3) _fastcall (_fastcall 呼びだし規約)
MS-C(6.0) 独自の呼びだし規約。 (可能ならば) レジスタを使い、引数を受け渡す。 レジスタに入りきらない引数については、パスカル呼びだし規約に従う。 (1)〜(3) の中で、もっとも経済的な呼びだし方法。

で、例えばパスカル呼びだし規約を使いたいときは、

int _pascal foo(int x, int y) ;

        :

int _pascal foo(int x, int y) {
    return x+y ;
}

の様に、関数を作成します。

ところで、MS-C (6.0)のデフォルトは (1)ですが、 そうでないコンパイラも存在します。 例えば、

Jensen & Partners International の TopSpeed C
エル・エス・アイ ジャパン(株) の LSI C-86

等は、デフォルトでレジスタ渡しになるようです。


TopSpeed C についての情報は、福田文紀氏より教えていただきました。(_ _)


[ <前 ][ 目次 ][ 次> ]
トップページに戻る