がの代わりに を 2 番目の引数としてとるのに対し、orのようなものではなく a をmemset
とるのはなぜですか?int
char
wmemset
wchar_t
long
long long
3 に答える
memset
Cへの関数プロトタイプの追加よりも(かなり前から)あります。プロトタイプがないと、関数にaを渡すことはできませんchar
。試してみると、int
渡すときに昇格します。受信する関数はですint
。
また、Cでは(C ++ではない)のような文字リテラルに'a'
は型がなくchar
、型int
があるため、渡すものは通常、int
とにかく最初になります。基本的に、charとして開始して昇格する唯一の方法は、char
変数を渡すことです。
理論的には、おそらく、の代わりにmemset
受け取るように変更することができますが、メリットがない可能性が高く、古いコードなどを壊す可能性はかなりあります。未知ではあるが潜在的にかなり高いコストがあり、実際の利益の可能性はほとんどないので、「スリム」と「なし」の境界線上に落ちるように変更される可能性があると思います。char
int
char
編集(コメントへの応答):のCHAR_BIT
最下位ビットはint
、ターゲットに書き込むための値として使用されます。
<ctypes.h>
おそらく、関数が取るints
のではなく、取るのと同じ理由chars
です。
ほとんどのプラットフォームでは、achar
は小さすぎてスタックにプッシュできないため、通常、マシンのワードサイズに最も近いタイプをプッシュしint
ます。
@ Gui13のコメントのリンクが指摘しているように、これを行うとパフォーマンスも向上します。