WebDAVクライアント(2) / 構造体を宣言時にゼロクリア / ブログはコテハンで書くべきか、捨てハンで書くべきか / COMとpimplイディオム

投稿日: 2005年05月18月 更新日: 2017年07月22月

WebDAVクライアント(2)

neonにopensslをリンクしてhttps通信に成功。ただしまだ証明書とか見てない。

あとはzlibをリンクして圧縮通信に対応させると、HTTPクライアントとしては十分な機能を備えることになるかな。

zlibをリンクするのは簡単そうだし、他の実装が終わったあとにでも作業する。httpsを先に試したのは後でつまづきそうだったから。

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

neonライブラリに下記のようなコードがあった。

struct fetch_context ctx = {0};

構造体を0クリアしているんだとわかるんだけど、よく考えてみると違和感がある。

つまり、{0}は構造体の最初のメンバーだけを初期化しているのであって、以降のメンバーは不定値なのでは?という疑問。

調べてみたところ、次のような理由によってゼロクリアされるということがわかった。

{0}は構造体を「0で埋める」ための特別な記述ではなく(当たり前なんだけど)、最初のメンバーに0で初期化するのみ。ただ、「初期化子が省略された場合に残りのメンバーを0で初期化する」という仕様((-これはあとで確信できるソースを探しておこう。K&Rに書いてあったっけ?-))のため結果として構造体全体が0で埋められるのである。

これでいちいち::ZeroMemory()とかmemset()しなくてもこの書き方で初期化できる。

こんなときに便利。

const struct hoge empty = {0};
static struct hoge empty = {0};

ブログはコテハンで書くべきか、捨てハンで書くべきか

内容は後で読む予定。

COMとpimplイディオム

どちらも軽く本で読んだだけだけど似てる気がする。

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

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

プロフィール

お問い合わせ