アカウント名:
パスワード:
int func(){ lock(); int r = func_body() ; unlock(); return r ;} int func_body(){ ... if(statement_stands) { return 1 ; } ... return 0;}
int func(){ lock1();... if (statement_stands) { unlock1(); return; }... lock2();... if (statement_stands) { /* ここでロックをはずすのを忘れる */ unlock1(); return; }... unlock2(); unlock1(); return;}
int func(){ lock1(); int r = func_body1() ; unlock1(); return r ;} int func_body1(){ ... if(statement_stands) { return 1 ; } ... lock2(); int r = func_body2(); unlock2(); return r;} int func_body2(){ ... if(statement_stands) { return 1; } ... return 0;}
ロック対象が増えた場合に見通しが悪くならね?
static int lfunc(){... if (statement_stands) { return; }...} int func(){ lock(); lfunc(); unlock();}
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stay hungry, Stay foolish. -- Steven Paul Jobs
出てくる警告にどう対処するのかが問題 (スコア:5, すばらしい洞察)
# しかも、周りがヤイのヤイの言っても、今まで一度も直らなかったぐらい
# 上から下まで、ものを判っていない。
というわけで、このようなツールを使ったからどう、という事ではありません。
このようなツールの出力にどう対処するかが問題。また、このようなツールが
出してくる警告の量から、プログラム改善にかかる時間を正確に見積もる、などの
マネージメント能力も大事でしょう。
fjの教祖様
Re: (スコア:1, 興味深い)
中でも最凶最悪なのは、関数の途中での return 禁止というものです。
枝刈りして関数を抜けたいのに、フラグを引き回して入れ子が深くなって読みづらいのです。
なにが嬉しくて可読性を落とすのか。教えて!エロイひと!
Re:出てくる警告にどう対処するのかが問題 (スコア:3, 興味深い)
int func()
{
lock();
...
if (statement_stands)
{
/* ここでロックをはずすのを忘れる */
return;
}
...
unlock();
return
}
とか.
Re:出てくる警告にどう対処するのかが問題 (スコア:1)
Re:出てくる警告にどう対処するのかが問題 (スコア:1, 参考になる)
Re:出てくる警告にどう対処するのかが問題 (スコア:1)
ロック対象が増えた段階で、プログラム上、無理がなければ、すぐに関数を分けてしまう方なので、あまり気にならないなぁ。
lock1();
...
lock2();
...
unlock1();
...
unlock2();
のような場合は1つで書かざる得ないが。
(でも、こういう例では、途中から抜けるような処理はご法度かなぁ。)
Re:出てくる警告にどう対処するのかが問題 (スコア:1)
Re: (スコア:0)
呼び出し元で戻り値を無視した点を評価したい。
# 余計なものではないのです!(嘘
そして、重箱の隅(Re:出てくる警告にどう対処するのかが問題) (スコア:0)
って書いたんだから、
> return;
に、リターンコード指定しようよw
Re:そして、重箱の隅(Re:出てくる警告にどう対処するのかが問題) (スコア:1)
Re: (スコア:0)
ついでに、
もし、C++で書いているんだったら、lock unlockはデストラクタで解決してくれと思う。
Cで書いているなら、 do{ }while(0); でがんばるか、エラー部分だけは例外的に goto err で抜けるとかがいいと思う。
Re:出てくる警告にどう対処するのかが問題 (スコア:1)
struct DoUndoLock {
DoUndoLock() { lock(); }
~DoUndoLock() {unlock(); }
}
void func()
{
DoUndoLock locker;
...
if (statement) {
...
return;
}
...
return;
}
みたいな.
Re: (スコア:0)
Re: (スコア:0)
Re: (スコア:0)
>デストラクタで例外が発生する可能性のある処理
例外が出るからといって回避してしまっては無意味でしょ。
例外が出たときにそれをなんとか片付ける手段をどこかで用意しないとならない、というだけのことだと思う。
そして、それが「不可能」な場合は、その環境下で作ったソフトは「使い物にならない」というだけのこと…であることがしばしば有ると思われ。
#作りたいソフトが常に「作れる」とは限らないんだよね。
Re: (スコア:0)