55

がの代わりに を 2 番目の引数としてとるのに対し、orのようなものではなく a をmemsetとるのはなぜですか?intcharwmemsetwchar_tlonglong long

4

3 に答える 3

58

memsetCへの関数プロトタイプの追加よりも(かなり前から)あります。プロトタイプがないと、関数にaを渡すことはできませんchar。試してみると、int渡すときに昇格します。受信する関数はですint

また、Cでは(C ++ではない)のような文字リテラルに'a'は型がなくchar、型intがあるため、渡すものは通常intとにかく最初になります。基本的に、charとして開始して昇格する唯一の方法は、char変数を渡すことです。

理論的には、おそらく、の代わりにmemset受け取るように変更することができますが、メリットがない可能性が高く、古いコードなどを壊す可能性はかなりあります。未知ではあるが潜在的にかなり高いコストがあり、実際の利益の可能性はほとんどないので、「スリム」と「なし」の境界線上に落ちるように変更される可能性があると思います。charintchar

編集(コメントへの応答):のCHAR_BIT最下位ビットはint、ターゲットに書き込むための値として使用されます。

于 2011-05-07T07:51:53.193 に答える
7

<ctypes.h>おそらく、関数が取るintsのではなく、取るのと同じ理由charsです。

ほとんどのプラットフォームでは、acharは小さすぎてスタックにプッシュできないため、通常、マシンのワードサイズに最も近いタイプをプッシュしintます。

@ Gui13のコメントのリンクが指摘しているように、これを行うとパフォーマンスも向上します。

于 2011-05-07T07:50:53.090 に答える