·
WebDAVクライアント(2) / 構造体を宣言時にゼロクリア / ブログはコテハンで書くべきか、捨てハンで書くべきか / COMとpimplイディオム
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イディオム
どちらも軽く本で読んだだけだけど似てる気がする。
