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やデータビズが好きです。このサイトは宮内の個人的なメモです。
Tags
Archives
- 2003/06
- 2003/07
- 2003/08
- 2003/09
- 2003/10
- 2003/11
- 2003/12
- 2004/01
- 2004/02
- 2004/03
- 2004/04
- 2004/05
- 2004/06
- 2004/07
- 2004/08
- 2004/09
- 2004/10
- 2004/11
- 2004/12
- 2005/01
- 2005/02
- 2005/03
- 2005/04
- 2005/05
- 2005/06
- 2005/07
- 2005/08
- 2005/09
- 2005/10
- 2005/11
- 2005/12
- 2006/01
- 2006/02
- 2006/03
- 2006/04
- 2006/05
- 2006/06
- 2006/07
- 2006/08
- 2006/09
- 2006/10
- 2006/11
- 2006/12
- 2007/01
- 2007/02
- 2007/03
- 2007/04
- 2007/05
- 2007/06
- 2007/07
- 2007/08
- 2007/09
- 2007/10
- 2007/11
- 2007/12
- 2008/01
- 2008/02
- 2008/03
- 2008/04
- 2008/05
- 2008/06
- 2008/07
- 2008/08
- 2008/09
- 2008/10
- 2008/11
- 2008/12
- 2009/01
- 2009/02
- 2009/03
- 2009/04
- 2009/05
- 2009/09
- 2009/10
- 2009/11
- 2009/12
- 2010/01
- 2010/02
- 2010/03
- 2010/04
- 2010/05
- 2010/06
- 2010/07
- 2010/10
- 2010/12
- 2011/01
- 2011/02
- 2011/03
- 2011/04
- 2011/05
- 2011/06
- 2011/07
- 2011/09
- 2011/10
- 2011/11
- 2011/12
- 2012/01
- 2012/02
- 2012/03
- 2012/04
- 2012/10
- 2015/05
- 2015/12
- 2016/02
- 2016/03
- 2016/04
- 2016/05
- 2017/01
- 2017/07
- 2017/08
- 2017/12
- 2018/03
- 2018/04
- 2018/05
- 2018/10
- 2020/07