2016/08/30

[c/c++]私のC言語 (7) - 構造体の初期化

だんだん「私の」がどうでもよくなってきた。。。
さっきやっていて、気付いた話だ。

構造体のメンバを初期化していた。
全部のメンバを初期化したいわけではなかったので、ちまちま代入させていたのだが、初期化子としてメンバ名を指定するタイプもあったことを思い出した。
「指定初期化子」と呼ぶらしい。
GCC拡張っぽい書き方だが、C99で採用されたようだ。

 

そっちで書いた方がサイズが小さくなるかと思ったが、結果的には増えていた。
なんでじゃ?と思い、代入していた頃に戻して、構造体の初期化で「={0}」を追加すると同じサイズになった。
なるほどねぇ。

今回試したのは、メンバが4つくらいしかないため、ちまちま代入させた方がサイズが小さくなるけれども、0を代入するような初期化であれば「={0}」なり指定初期化子なりを使った方がサイズが小さくなるかもしれない。

昔いくつか見たときには、「={0}」ってmemset()に変換されていたけど、今はどうなんだろうね?
標準ライブラリを組み込まないときに「memsetがない」って怒られたときは、訳がわからなかったぞ。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。