アカウント名:
パスワード:
警告を無視しちゃいかんという教訓を得たと。
こんな感じに、if分を一行にまとめてしまえば、こんな不具合出なかった気がします。
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail;if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;
一行が長くなるのを嫌ったのかな?
#define ErrorCheck(f) do { if ((err = f) != 0) goto fail; } while (0)
ErrorCheck(SSLHashSHA1.update(&hashCtx, &serverRandom));ErrorCheck(SSLHashSHA1.update(&hashCtx, &signedParams));ErrorCheck(SSLHashSHA1.final(&hashCtx, &hashOut));
ってやりたくなるんだけど、ダメ?
いまだにdoとwhile(0)を使う理由がわからない。{~}だけでよいのでは。
こういう生半可を産んでしまうので、やはりマクロは鬼門ですな。constやインライン関数など、マクロを使わずにすむ仕掛けを使いたいところだけど、今回のようなものはそれらじゃ書けない。マクロが悪いのか、gotoが悪いのか...
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
unreachable codeの警告は無視されたのか (スコア:0)
警告を無視しちゃいかんという教訓を得たと。
こんな感じに、if分を一行にまとめてしまえば、こんな不具合出なかった気がします。
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;
一行が長くなるのを嫌ったのかな?
Re: (スコア:0)
#define ErrorCheck(f) do { if ((err = f) != 0) goto fail; } while (0)
ErrorCheck(SSLHashSHA1.update(&hashCtx, &serverRandom));
ErrorCheck(SSLHashSHA1.update(&hashCtx, &signedParams));
ErrorCheck(SSLHashSHA1.final(&hashCtx, &hashOut));
ってやりたくなるんだけど、ダメ?
Re: (スコア:0)
いまだにdoとwhile(0)を使う理由がわからない。
{~}だけでよいのでは。
Re: (スコア:0)
括弧だけだとif文に後続する複文になってしまうから、do while(0)で囲んで単文にすることで、括弧なしのif文で使ったとき正しく展開されるようになる。
ただしif文そのものは単文だから、今回のif ((err = f) != 0) goto failはdo while(0)で囲む必要は全くない。
#define ErrorCheck(f) if ((err = f) != 0) goto fail
でおk
# 末尾に;つけないでおくのがポイント
Re:unreachable codeの警告は無視されたのか (スコア:0)
こういう生半可を産んでしまうので、やはりマクロは鬼門ですな。
constやインライン関数など、マクロを使わずにすむ仕掛けを使いたいところだけど、今回のようなものはそれらじゃ書けない。
マクロが悪いのか、gotoが悪いのか...