アプリ版:「スタンプのみでお礼する」機能のリリースについて

char型の配列の初期化の仕方について教えて下さい。

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

最初の記述のほうが無駄な処理がないように思えるのですが、
memsetを使うメリットは何かあるのでしょうか?

A 回答 (2件)

auto だといずれにしても「実行時に全て 0 にする」ということをしなきゃならんので, 「本質的な違い」はないと思います. あとはコンパイラがどこまで最適化してくれるか, あるいはライブラリがどこまで最適化されているかに依存します.... まあ, 前者の方が「遅い」ことはないと思うけど.


昔の C だとどうだろ. ひょっとすると, 大昔は「memset しないと 0 クリアが保証されない」ということがあったかもしれません.
    • good
    • 0

質問の、上のほうの記述ができるようになったのはANSI規格になってからです。


#それ以前は処理系による

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

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

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

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

大昔のコンパイラでもコンパイルできる。くらい?
    • good
    • 0
この回答へのお礼

大変、勉強になりました。
ありがとうございます。

お礼日時:2008/04/28 13:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!