アカウント名:
パスワード:
> どっかのお兄さんがfclose()はどのルートでも実行すればいい
あくまでfpがあるときは、漏れなくcloseしようですもんね。
# Cのポインタは、1.解放漏れ、2.2重解放(解放時の変数のNULL初期化漏れとかその判定漏れ) 3.NULLでのアクセス/クローズ の3つはチェックできてないとまずいってところかなあ...
んー、それはどうだろう?クローズのときにNULLが渡されるのって、異常系が実装されていない正しくないロジックだから、と考えれば、異常終了するのが望ましい。…と考えることもできるんじゃないかと。
どうしても、ってことなら、
fclose(fp);
を
fp && fclose(fp);
と書けば済む話だしね。
# Powershellのusing、なぜC#相当じゃないんだー!!
というと、free(NULL)とfclose(NULL)で差を設けている理由はなんでしょうかね・・・
不明としか言いようがないですね。
ただ、mallocに失敗して、NULLが返ってきて、そのエラー処理をしていなければ、freeするより前に異常終了しますよね。NULLチェックをしているなら、正常系にのみfreeを書けば済むし。
この書き方おもしろいですねw
Cだと割とよくある書き方だと思いますよ。こーゆーのを知らないと、例えば、
if(func1() || func2()) {
みたいなコードを書いたときに、func2が実行されない! みたいなことで悩むことになります。
なので、中級の教科書には載ってると思います。
あんまり見ない書き方ですねw
見たことが無いのは、個人の経験なので仕方ないですね。# 職業プログラマなら、草生やしてる場合じゃないと思いますが。
しかし、中級以上の教科書では必ず解説されているので、手元の教科書を読み返してみてください。もちろん、ぐぐってもいいです。いくらでも出てきます。
関数の戻り値評価は
関数でなくても、
flag && --i > 0
とかでも同じ問題が発生します。
業界柄、使用が禁止されているということですよw
それはよく理解できます。もっと緩いソフトウェア開発の現場でも、レベルの低いプログラマ(というか、コーダというか)が混じっている場合(残念ながらよくあることです)には、そーゆーコーディング規約を定めることはよくあります。つまり、レベルの低いメンバが理解していないだろうハマり所にハマらないように、最初から禁止しておく、ってことです。
言い換えれば、レベルの高い低いを決めるのは、その理由を知ってるか知らないかだ、ってことです。
fcloseやfreeもそうで、上から言われたからやってる、ってのじゃ、職業プログラマとしてはちょっと…となるわけです。どれも学生さんが使う教科書にも載ってるわけですし。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
いつでもfclose (スコア:1)
> どっかのお兄さんがfclose()はどのルートでも実行すればいい
あくまでfpがあるときは、漏れなくcloseしようですもんね。
# Cのポインタは、1.解放漏れ、2.2重解放(解放時の変数のNULL初期化漏れとかその判定漏れ) 3.NULLでのアクセス/クローズ の3つはチェックできてないとまずいってところかなあ...
M-FalconSky (暑いか寒い)
Re: (スコア:1)
解放対象がNULLかどうか、コールされたAPI側で判定して欲しいです。。。
Re: (スコア:1)
んー、それはどうだろう?
クローズのときにNULLが渡されるのって、異常系が実装されていない正しくないロジックだから、と考えれば、異常終了するのが望ましい。
…と考えることもできるんじゃないかと。
どうしても、ってことなら、
を
と書けば済む話だしね。
# Powershellのusing、なぜC#相当じゃないんだー!!
Re: (スコア:1)
というと、free(NULL)とfclose(NULL)で差を設けている理由はなんでしょうかね・・・
> fp && fclose(fp);
この書き方おもしろいですねw
ワンライナーで実行する・しないが選べるとは・・・
Re: (スコア:1)
というと、free(NULL)とfclose(NULL)で差を設けている理由はなんでしょうかね・・・
不明としか言いようがないですね。
ただ、mallocに失敗して、NULLが返ってきて、そのエラー処理をしていなければ、freeするより前に異常終了しますよね。
NULLチェックをしているなら、正常系にのみfreeを書けば済むし。
この書き方おもしろいですねw
Cだと割とよくある書き方だと思いますよ。
こーゆーのを知らないと、例えば、
みたいなコードを書いたときに、func2が実行されない! みたいなことで悩むことになります。
なので、中級の教科書には載ってると思います。
Re: (スコア:1)
あんまり見ない書き方ですねw
関数の戻り値評価は、おおよそ一関数実行の後にすぐやるので複数条件の並ぶ
if文はそうそう出てこないです。
また、gdbを使うことが多いので戻り値は一時変数に取ることが多いです。
Re: (スコア:1)
あんまり見ない書き方ですねw
見たことが無いのは、個人の経験なので仕方ないですね。
# 職業プログラマなら、草生やしてる場合じゃないと思いますが。
しかし、中級以上の教科書では必ず解説されているので、手元の教科書を読み返してみてください。
もちろん、ぐぐってもいいです。いくらでも出てきます。
関数の戻り値評価は
関数でなくても、
とかでも同じ問題が発生します。
Re:いつでもfclose (スコア:1)
以下のリンクの(5)の通りでございます。。。
http://www.softech.co.jp/mm_070801_firm.htm#rule12-4
ひとまずありがとうございました!
Re:いつでもfclose (スコア:1)
業界柄、使用が禁止されているということですよw
それはよく理解できます。
もっと緩いソフトウェア開発の現場でも、レベルの低いプログラマ(というか、コーダというか)が混じっている場合(残念ながらよくあることです)には、そーゆーコーディング規約を定めることはよくあります。
つまり、レベルの低いメンバが理解していないだろうハマり所にハマらないように、最初から禁止しておく、ってことです。
言い換えれば、レベルの高い低いを決めるのは、その理由を知ってるか知らないかだ、ってことです。
fcloseやfreeもそうで、上から言われたからやってる、ってのじゃ、職業プログラマとしてはちょっと…となるわけです。
どれも学生さんが使う教科書にも載ってるわけですし。
Re:いつでもfclose (スコア:1)
緩い現場の話でのルール適用なら、私もそうだと思いますw
コードレビューする側に十分なスキルがある現場は理想的ですね。
> どれも学生さんが使う教科書にも載ってるわけですし。
そうですね!
くれぐれも気をつけたいと思います。