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);が二つ出てくることになるのはどうなんでしょう?