·
構造体を宣言時にゼロクリア(2) / WebDAVバージョニング実装に関するメモ
構造体を宣言時にゼロクリア(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");
}
