- ベストアンサー
char型の配列の初期化について
char型の配列の初期化の仕方について教えて下さい。 一般的に変数は宣言と同時に初期化するのが良いと言われているので、 char cName[64] = {'\0'}; のように記述すべきだと思うのですが、 char cName[64]; memset( cName, 0x00, sizeof( cName ) ); のような記述を多く目にします。 最初の記述のほうが無駄な処理がないように思えるのですが、 memsetを使うメリットは何かあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問の、上のほうの記述ができるようになったのはANSI規格になってからです。 #それ以前は処理系による C FAQ 1 http://www.kouno.jp/home/c_faq/c1.html の 1.31あたりをどうぞ。 多く目にする理由は、たぶん上のような書き方ができるということを知らない人が 多いからじゃないでしょうか。 参考書書く人も意外にこういうところを見落としてたりするし。 >memsetを使うメリットは何かあるのでしょうか? 大昔のコンパイラでもコンパイルできる。くらい?
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
auto だといずれにしても「実行時に全て 0 にする」ということをしなきゃならんので, 「本質的な違い」はないと思います. あとはコンパイラがどこまで最適化してくれるか, あるいはライブラリがどこまで最適化されているかに依存します.... まあ, 前者の方が「遅い」ことはないと思うけど. 昔の C だとどうだろ. ひょっとすると, 大昔は「memset しないと 0 クリアが保証されない」ということがあったかもしれません.
お礼
大変、勉強になりました。 ありがとうございます。