アカウント名:
パスワード:
int func(char *arg) { int n; if (arg == NULL) { n = -1; goto END; } /* なんか処理 */ if (なんかエラー) { n = 1; goto END; } /* なんか処理 */ n = 0;END: return n;}
int func() { char *p1 = NULL, *p2 = NULL; p1 = (char*)malloc(); if (p1 == NULL) { n = -1; goto END; } /* なんか処理 */ p2 = (char*)malloc(); if (p2 == NULL) { n = -1; goto END; } /* なんか処理 */ n = 0;END: if (p1 != NULL) free(p1); if (p2 != NULL) free(p2); return n;}
「1関数内にreturnを複数書くのは(見難くなるから)禁止。(出口は一ヶ所であるべき)」
正直、こういう事例のためだけでも、C++(つーか例外処理)を導入して欲しいと思う私。クラスやテンプレートなんざ使わなくてもいいからさ。そういうルールをブチあげてみようか。
int func() { char *p1 = NULL, *p2 = NULL; int n = 0; try { p1 = new char[nnnn]; /* なんか処
if (p1 != NULL) free(p1);if (p2 != NULL) free(p2);
free(p1); free(p2);
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stableって古いって意味だっけ? -- Debian初級
コーディング規約で仕方なく (スコア:0)
「コーディング規約で仕方なく使ってる」って意味でしょうか?
質問文からして、そういう意味になるのかなと思ったのですが・・・
で、もしそうだとした場合、コーディング規約でgotoを禁止するのではなく
逆にgotoの仕様を強いるような理由が何かあるってことでしょうか
Re:コーディング規約で仕方なく (スコア:0)
Re:コーディング規約で仕方なく (スコア:1)
正直、こういう事例のためだけでも、C++(つーか例外処理)を導入して欲しいと思う私。クラスやテンプレートなんざ使わなくてもいいからさ。そういうルールをブチあげてみようか。
ほえほえ
Re:コーディング規約で仕方なく (スコア:1)
ちなみにC++でgotoすると
Re:コーディング規約で仕方なく (スコア:1, すばらしい洞察)
例外的でない処理のために、例外処理機構を使うのはいかがなものでしょうか。
例外処理を体の良いジャンプのように使っているソースを見かけることがありますが、
読み辛さはgotoやlongjmpと同じかそれ以上だと感じます。
Re:コーディング規約で仕方なく (スコア:0)
テンプレートや多重継承も削られてるけど、使い物になるのかなぁ?
Re:コーディング規約で仕方なく (スコア:0)
Re:コーディング規約で仕方なく (スコア:1)
後処理があるときももちろんなんですが、関数のIN側OUT側でログを吐くのにも使いますね。
ログを追うだけで流れがわかるので便利。
gdbとか使える環境ばかりじゃないんで…
func(cond)
{
DEBUG_TRACE_IN("");
if (cond) {
DEBUG_TRACE_ERR("cond error.");
goto end;
}
hoge2();
end:
DEBUG_TRACE_OUT("");
return;
}
必然性なく乱用するのはバカだけど、
gotoのほうが綺麗に書けるときにgoto使わないのもアレだと思います。
Re:コーディング規約で仕方なく (スコア:0)
Re:コーディング規約で仕方なく (スコア:1, 参考になる)
Re:コーディング規約で仕方なく (スコア:0)