memset が char ではなく int を取るのはなぜですか? 質問する

memset が char ではなく int を取るのはなぜですか? 質問する

はなぜ2 番目の引数として ではなくmemsetを取るのに、は や のようなものの代わりにを取るのでしょうか?intcharwmemsetwchar_tlonglong long

ベストアンサー1

memsetC言語に関数プロトタイプが追加されるよりかなり前から存在しています。プロトタイプがなければ、できないを関数に渡しますchar-- 試すと、int渡した時点で に昇格され、関数が受け取るのは ですint

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

理論上は、の代わりにmemsetを受け取るように を変更できる可能性がありますが、メリットはほとんどなく、古いコードなどが壊れる可能性がかなりあります。コストは不明ですが、かなり高くなる可能性があり、実際にメリットが得られる可能性はほとんどないため、 を受け取るように変更される可能性は「わずか」と「まったくない」のちょうど中間くらいだと思います。charintchar

memset宛先に書き込まれる値は、 に変換された 2 番目の引数の値ですunsigned char

おすすめ記事