アカウント名:
パスワード:
警告を無視しちゃいかんという教訓を得たと。
こんな感じに、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 いるの?
今回のケースでは必要ないけど、#2550910がいうような凡ミスを防ぐために習慣的に付けるよね。多少のタイプ量以上のオーバーヘッドもないし。
後から読むときもループなのか、終了条件は・・・ループじゃねえのか!なんでdo while付いてんだ!ってオーバーヘッドがあるじゃん。#2550910がいうミスを防ぐなら括弧だけでいいのに
do while (0)は使い古されたテクニックだから、そういうもんだと一度覚えればいいだけだが。こういうBad Know Howを嫌うのも仕方ないけど、Cだからね。で、括弧だけではダメな理由は、
if (foo == true) ErrorCheck();else ...
がコンパイルエラーになること。やってみそ。
オーバーヘッドがあるかないかはコンパイラ依存。do~while(0)の場合に{~}と同じアセンブラを吐け、という規約はないだろ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ソースを見ろ -- ある4桁UID
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 いるの?
Re:unreachable codeの警告は無視されたのか (スコア:0)
今回のケースでは必要ないけど、#2550910がいうような凡ミスを防ぐために習慣的に付けるよね。多少のタイプ量以上のオーバーヘッドもないし。
Re: (スコア:0)
後から読むときもループなのか、終了条件は・・・ループじゃねえのか!なんでdo while付いてんだ!ってオーバーヘッドがあるじゃん。
#2550910がいうミスを防ぐなら括弧だけでいいのに
Re: (スコア:0)
do while (0)は使い古されたテクニックだから、そういうもんだと一度覚えればいいだけだが。
こういうBad Know Howを嫌うのも仕方ないけど、Cだからね。
で、括弧だけではダメな理由は、
if (foo == true)
ErrorCheck();
else
...
がコンパイルエラーになること。やってみそ。
Re: (スコア:0)
Re: (スコア:0)
オーバーヘッドがあるかないかはコンパイラ依存。
do~while(0)の場合に{~}と同じアセンブラを吐け、という規約はないだろ。