ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3982044 char型の配列の初期化について
質問者:tadasuke2002 char型の配列の初期化の仕方について教えて下さい。

一般的に変数は宣言と同時に初期化するのが良いと言われているので、
char cName[64] = {'\0'};
のように記述すべきだと思うのですが、
char cName[64];
memset( cName, 0x00, sizeof( cName ) );
のような記述を多く目にします。

最初の記述のほうが無駄な処理がないように思えるのですが、
memsetを使うメリットは何かあるのでしょうか?
困り度:
  • 困っています
質問投稿日時:
08/04/28 12:48
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.2 質問の、上のほうの記述ができるようになったのはANSI規格になってからです。
#それ以前は処理系による

C FAQ 1
http://www.kouno.jp/home/c_faq/c1.html
の 1.31あたりをどうぞ。

多く目にする理由は、たぶん上のような書き方ができるということを知らない人が
多いからじゃないでしょうか。

参考書書く人も意外にこういうところを見落としてたりするし。

>memsetを使うメリットは何かあるのでしょうか?

大昔のコンパイラでもコンパイルできる。くらい?
回答者:sakusaker7
種類:回答
どんな人:経験者
自信:参考意見
回答日時:
08/04/28 13:09
この回答へのお礼大変、勉強になりました。
ありがとうございます。

回答良回答10pt

ANo.1 auto だといずれにしても「実行時に全て 0 にする」ということをしなきゃならんので, 「本質的な違い」はないと思います. あとはコンパイラがどこまで最適化してくれるか, あるいはライブラリがどこまで最適化されているかに依存します.... まあ, 前者の方が「遅い」ことはないと思うけど.
昔の C だとどうだろ. ひょっとすると, 大昔は「memset しないと 0 クリアが保証されない」ということがあったかもしれません.
回答者:Tacosan
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/28 12:59
この回答へのお礼この回答にお礼をつける(質問者のみ)