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

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

  • by Anonymous Coward

    #define ZERO (1)

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

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

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

      てのがありました。
      --
      clausemitz
      • by Anonymous Coward
        それは
        if (flag == TRUE) ...
        みたいなコード書く方が悪い。
        真偽値の判定は常にfalse (= 0)と比較すること。
        • これはC言語かな?

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

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

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

          • by Anonymous Coward

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

            • by Anonymous Coward

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

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

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

              • by Anonymous Coward

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

                MISRA-Cに遵守するには、下記の3つのステップが必要である。 [openrtp.jp]
                        * どのように各ルールが適用されているかのチェック手法を示す合致マトリクスの作成
                   

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

物事のやり方は一つではない -- Perlな人

処理中...