何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 35970
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

BOOL
someFunction(ptr)
void **ptr;
{
    // いろいろやっているのは省略
    // こんなに短くはない。
    // 短くないからこそ、余計に?なんだけど。
    // でも、そこまで書くのは疲れるし。
    // 読むほうも大変だろうから、
    // この辺でやめておく。
    // とにかく、この、最後の行だけを、
    // 見てしまったと思ってください。

    return !!*p;
}
投稿日時 : 2009年10月4日 0:37
コメント
  • # re: びっくりコード
    読者
    Posted @ 2009/10/04 11:44
    このプロジェクトの引継ぎだけは、ご免被りたいですね。。
  • # re: びっくりコード
    Jitta
    Posted @ 2009/10/04 20:27
    コメントありがとうございます。

    今からでも「ごめん、無理」って言えるなら、いいたいです。。。
    なお、嘘が一つありますが、それは愛嬌ということで。
  • # re: びっくりコード
    774RR
    Posted @ 2009/10/05 8:32
    えー、なにが問題なのかよくわかりません。
    ・旧式の関数定義している点でしょうか?
    ・ポインタ値を BOOL に変換している点でしょうか?
    ・ !! という見慣れない表記でしょうか?
    ・ p が未定義なところでしょうか?

    !!x は x!=0 と同義であり、俺としてはなんの違和感も感じません。
    自分自身が !!x と記述するか?と問われると「しません」が。
  • # re: びっくりコード
    あんどちん
    Posted @ 2009/10/05 10:26
    >> 774RRさん
    とりあえず2点ほど気になったので。揚げ足取りのようで恐縮ですが。

    > ・ポインタ値を BOOL に変換している点でしょうか?
    > ・ p が未定義なところでしょうか?
    pが未定義なので(引数ならptrだからという意図で書かれていますよね?)*pがポインタ値かどうかは不明だと思います。

    > !!x は x!=0 と同義
    !!xはxの値が0ならば0それ以外なら1を返すだけでxに代入はされませんよね?だから同義にならないと思います。違和感を感じないのは同意です。
    0or1へ変換する目的で僕は時々この記述を使用します。!!n * 100のように記述して計算結果を0/100にするとか。
    C++ならtrue/falseへ変換できますね。



    多分BOOLに対応する真偽値(例えばTRUE/FALSEが定義されている)が0/1である保証が無いので違和感を感じられているのだと思います。
  • # re: びっくりコード
    774RR
    Posted @ 2009/10/05 10:42
    さらに揚げ足取りっぽいのですが
    x!=0 で代入がされますか?比較しかしてないはずです。

    違和感感じない人が他にもいてよかったです :-)
  • # re: びっくりコード
    出水
    Posted @ 2009/10/05 10:55
    私としては「!!xに違和感を感じない」と言いきってしまう事自体に違和感を覚えます
  • # re: びっくりコード
    あんどちん
    Posted @ 2009/10/05 11:31
    > x!=0 で代入がされますか?比較しかしてないはずです。
    あ!しまった。x+=0と勘違いしてた。
    はい。代入されません。とんでもない勘違いをしていました。
    勘違いで揚げ足取りすいませんでした。m(_ _)m
    # つーかこんな勘違いするなんてロクに言語仕様知らないのバレバレぢゃん

    > 私としては「!!xに違和感を感じない」と言いきってしまう事自体に違和感を覚えます
    そっちか…そうね。
  • # re: びっくりコード
    774RR
    Posted @ 2009/10/05 13:08
    違和感も何も、単に0か1かを得るイディオムにすぎないので。
    if (p) や if (!p) を if (p!=NULL) とか if (p==NULL) とか書くべきか否か?
    前者の記述に違和感を覚えるか?
    後者の記述に違和感を覚えるか?
    あたりと話のレベルは大差ないとおもうのであります。
  • # re: びっくりコード
    Jitta
    Posted @ 2009/10/05 22:13
    コメント、および白熱した議論をありがとうございます。

    ただですね、コード内のコメントを、もう一度、よくお読みください。

    > ・ p が未定義なところでしょうか?
    // いろいろやっているのは省略

    > 違和感も何も、単に0か1かを得るイディオムにすぎないので。
    // とにかく、この、最後の行だけを、
    // 見てしまったと思ってください。

    *p は、省略してしまっていますが、malloc しています。しかし、結構長い、つまり1画面に関数が収まりきらないようなところで、「return !!*p;」だけ・・・だけっちゅうか、p の宣言を知らないまま、この行をみてしまった、と。
    そりゃね、p が何者かわかれば、この行も不思議ではないですよ。でも、それこそ、「return (*p != NULL);」としてあれば、数秒間でも固まらずにすむじゃないですか。
  • # re: びっくりコード
    ほよよ
    Posted @ 2009/10/06 7:40
    それが正しいコードだとして、デリファレンスしているのだからpは何らかのポインタにきまっているのではありませんか。
    !!は確かに初めてだと面食らう書き方かもしれませんが、Perlやなんかではたまに目にする表現ですね(他にもゴルフとか)。

    それだけ別れば何となくですがpの指しているものをブーリアンにして返しているのだということは理解できると思います。

    変な書き方しているコードを見て驚いて、それを人に伝えたくてブログに書かれたのでしょうが、本人の興奮が伝わってくるだけで、なんやらよく分からない印象を覚えました。
  • # re: びっくりコード
    Jitta
    Posted @ 2009/10/06 21:20
    ほよよさん、コメントありがとうございます。

    驚きが伝わったなら、私の目的はそれで達成です。あとは、あなた方受け取った人が、どう考えるかです。
    「驚いたのか」で終わるか。「驚かせるコードを書くのが仕事なのだろうか」と考えるか。それはお任せします。
タイトル
名前
Url
コメント