構造体を宣言時にゼロクリア(2) / WebDAVバージョニング実装に関するメモ

投稿日: 2005年05月19月

構造体を宣言時にゼロクリア(2)

「構造体を宣言時にゼロクリア」というのはちょっと間違い。「構造体のメンバーを宣言時に0で初期化」くらいが正しかった。

昨日「これでいちいち::ZeroMemory()とかmemset()しなくてもこの書き方で初期化できる。」と書いたけど、これらの関数を使って0で埋めた場合と{0}で初期化したときでは結果は等価ではない(ように思える)。

memset()等を使った場合はパディングも含めて0クリアされる。しかし、{0}は各メンバーに0を設定するがパディングは0クリアされないと思う。

struct Hoge{
  int a;
  int b;
};


Hoge hoge_a = {0};
Hoge hoge_b;


memset(&hoge_b, 0, sizeof(hoge_b));

if(memcmp(&hoge_b, 0, sizeof(hoge_b) == 0){
   // 多分ここは通らない(VC++のデバッグモードなら通りそう)
   printf("memcmpで一致.\n");
}


if(hoge_a.a == hoge_b.a && hoge_a.b == hoge_b.b){
   // ここは通る
   printf("メンバー単位で一致.\n");
}

WebDAVバージョニング実装に関するメモ

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ