パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

#俺が見たクソコード選手権、Twitterで盛り上がる」記事へのコメント

  • by Anonymous Coward on 2012年04月03日 20時12分 (#2128979)

    #define ZERO (1)

    • 複数の業者が入り混じったプロジェクトで、A社のモジュールだけだと動作、B社のモジュールだけだと動作。
      ところが両方を連結すると、とたんに動かない。調査してビックリ。

      A社のヘッダーファイル → #define TRUE 1

      B社のヘッダーファイル → #define TRUE (-1)

      てのがありました。
      --
      clausemitz
      親コメント
      • by Anonymous Coward on 2012年04月03日 20時48分 (#2129014)
        B社はきっとBASICプログラマー
        親コメント
      • by x-rebuttal (33869) on 2012年04月04日 6時54分 (#2129228)

        それって、if (hoge==TRUE) のような書き方をしている部分があるというのが真の問題では?
        C言語における真偽値の仕様をわかっていれば、その定義になっていても問題は起こらないはず。

        親コメント
      • by Anonymous Coward
        それは
        if (flag == TRUE) ...
        みたいなコード書く方が悪い。
        真偽値の判定は常にfalse (= 0)と比較すること。
        • by firewheel (31280) on 2012年04月03日 21時19分 (#2129051)

          これはC言語かな?

          むしろ言語として真偽値がないことの方が問題なような。
          #そりゃあ古い言語だからねえ……。

          >if (flag == TRUE) ...
          >みたいなコード書く方が悪い。
          こっちは必ずしも悪くないような。
          flag が、TRUE, FALSE, UNDEFINED, ERROR みたいな値を取るかもしれないんだから。

          この書き方は「あんまり良くない」けれど、C言語だと機能的に制限があるので仕方なかった。

          親コメント
          • by Anonymous Coward on 2012年04月03日 23時00分 (#2129124)

            ここは
            if (flag) {
            }
            もしくは
            if (!flag) {
            }
            でしょう。

            親コメント
            • by Anonymous Coward

              残念ながらMISRA-Cでは以下の規約に引っかかります。
              推奨なんで必須では無いんですけどね。

              13.2 A オペランドが実質的なブール型である場合を除き、0との比較テストは明示的に行うべきである。

              組み込みでCとかだとまず引っかかるんじゃないかな。

              • by Anonymous Coward on 2012年04月04日 23時15分 (#2129849)

                "flag"だから「実質的なブール型である」べき。
                MISRA-Cがコーディングルールだと宣っている現場を見たことがあるが、outputはクソっぽかった。(具体的にはとても外に言えないが)
                理念を取り入れず外形だけ取り繕うとしているから、常にバグに追いかけられている感じ。

                MISRA-Cに遵守するには、下記の3つのステップが必要である。 [openrtp.jp]
                        * どのように各ルールが適用されているかのチェック手法を示す合致マトリクスの作成
                        * ルールから逸脱する場合の手順
                        * 作業手順を、品質管理システム中の正式なものにする

                が全く無く、ルールに固執して迂回表現を取っていたりするんで、何をやってんだか読みきれないコードが出来上がるという...

                親コメント
              • by Anonymous Coward
                むしろ「実質的なブール型」のときは積極的に0との比較を省略することによって、「ここに出てくる変数は真偽値ですよ」「こっちは数値ですよ」と書き分けることを意図した規格なんじゃないのかなぁ。そういう意図があるならそう書いとけばいいのに書かないから、分かってない人がゴミ量産するはめになってんだと思う。規格書もある意味コードなんだから、これも一種のクソコードと言っていいと思う。
          • by Anonymous Coward on 2012年04月03日 23時49分 (#2129149)

            "flag"に多値を持ち込んで欲しくないなぁ。

            親コメント
          • by Anonymous Coward
            > flag が、TRUE, FALSE, UNDEFINED, ERROR みたいな値を取る
            それも十分クソコード臭いが…
            DBのNULL値に代表されるように多値論理なんてありとあらゆる害悪の元だろ。んな色々な値がありうる状態の一つにTRUEとかつけちゃダメ。
            • by firewheel (31280) on 2012年04月04日 4時03分 (#2129209)

              だから「あんまり良くない」とは言ってる。
              Javaだったらこんなコードは書かないよ。

              >DBのNULL値に代表されるように
              DBのNULL値はまったく別問題。
              たぶんまだDBを良く分かってないんだよね。

              親コメント
              • by Anonymous Coward
                「悪くないような」って自分で書いてるだろが糞が。NULL問題はCJデイト氏の著作一本でも読めば今のお前より100倍は詳しくなれるよ。とりあえずお前の書いたコードが身近にいないことだけ神に祈っとくことにするよ。
              • by Anonymous Coward

                ○○倍とかいう表現をするときに、実際に何かに基づいているわけでもないのに無駄に大きな値を使う人は、大体頭の弱い人であると私は思っている。
                どうでもいいかもしれんが。

              • by Anonymous Coward
                ごめんね。0除算例外で落ちたって言っとくべきだったねw
              • by 127.0.0.1 (33105) on 2012年04月04日 17時03分 (#2129653) 日記

                「xxxを256倍使う本」の著者のことですね!

                親コメント
              • by 127.0.0.1 (33105) on 2012年04月04日 17時05分 (#2129656) 日記

                「xxxを256倍使う本」じゃなくて「「xxxを256倍使うための本」だった!

                親コメント
          • by Anonymous Coward

            #include <stdbool.h>

    • by Anonymous Coward on 2012年04月04日 5時02分 (#2129215)

      // iが0なら処理スキップ
      if (i==0) {
              処理();
      }

      …どっちがほんとだよ。

      あと、
      findHoge()の中でやってるのはどう見てもHogeじゃない要素を取りだす処理だったりとか。

      親コメント
    • #define private public
      Visual Studioでは通んないけど。たぶん
      • by Anonymous Coward

        ひとたび公私混同してしまうと最初のうちは楽ちんですけど、
        つまらないしがらみに縛られて後から切り分けが困難になりますよ…。

      • by Anonymous Coward

        逆にどのコンパイラだったら通るの?

        • by Anonymous Coward
          VC++以外なら大抵通るんじゃないの?
          VC++は一気にコンパイルすれば通るソースなのに、/Pオプションでプリプロセッサ出力をファイルに落としたのを再度コンパイルすると通らなくなる不思議な処理系だから。
    • by Anonymous Coward

      #define MAGIC_NUMBER = ...

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

処理中...