EmptyPage.jp > Whining Express > 2003-11-20
サイトの更新情報や日々の雑感など。
べつにWZマクロに限らずC言語系の言語一般にあてはまるのではないかと思うのですが。
以下の例では、foo
というFOO
オブジェクト(typedef
された構造体)を作成して、そこからなにやら文字列を取得していると考えてください(シチュエーションは適当にでっち上げたので必然性に乏しいですがご勘弁を)。
void sample1(TX *text) { FOO *foo = fooNew(); if (foo) { DWORD sizeBuff = fooGetStringLength(foo) + 1; mchar *pszBuff = malloc(sizeBuff); if (pszBuff) { fooGetString(foo, pszBuff, sizeBuff); printf("%s", pszBuff); free(pszBuff); } fooDelete(foo); } }
これは以下のようにも書けますよね。
void sample2(TX *text) { FOO *foo = fooNew(); if (!foo) return; DWORD sizeBuff = fooGetStringLength(foo) + 1; mchar *pszBuff = malloc(sizeBuff); if (!pszBuff) { fooDelete(foo); return; } fooGetString(foo, pszBuff, sizeBuff); printf("%s", pszBuff); free(pszBuff); fooDelete(foo); }
さて、どっちがいいのでしょう。とくに、後者でfooDelete(foo);
が二つ出てくることになるのはどうなんでしょう?