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

コーディング標準は役に立つのか 」記事へのコメント

  • by Anonymous Coward

    C に記述標準を設けてバグの入りにくいコードを書けるようにという志で作られた MISRA C ですが、
    関数の末尾以外の return を禁止するという誰得ルールを筆頭に使い物にならない制約が多すぎます。
    役に立つところといえば、これをそのまま採用するところの技術力は信用できないという判断材料になることぐらい。

    • Re: (スコア:1, すばらしい洞察)

      by Anonymous Coward

      > 関数の末尾以外の return を禁止する

      なぜ禁止なのかわからない人にコードは書かせたくないなあ

      • by Anonymous Coward

        なぜ禁止すべきでないのかわからない人にコードを書かされたくないなあ。
        # 論理的な理由があるならそれを書けば済むだけなのに決まってこんな罵倒しか返ってこないんだよな

        • by fl (43569) on 2012年12月24日 23時57分 (#2295787) 日記

          途中で return すると、リソース解放し忘れるミスが増えるから。
          コードの見通しの悪さによる保守性悪化と、リソースリークの潜在的危険性を天秤にかけた。
          理由としてはそれだけ。

          MISRA C の主目的は深刻なバグの入りやすいパターンを避けることだから
          大多数にはバカバカしいルールでも、たった一人の間抜けに躓かないための妥協が多くなる。

          C にデストラクタがあればこんなルールは生まれないね。

          親コメント
          • > 途中で return すると、リソース解放し忘れるミスが増えるから。

            それならそこだけ禁止すればいいだけなのに、なんで全部禁止にしたがるのでしょうね?
            その関数がリソース解放しているかどうかぐらい書いている人もレビューする人も分かりますよね。
            親コメント
            • by Ay (33430) on 2012年12月25日 9時50分 (#2295857)

              その関数が一人の人間が見通しの良い行数以内で一度書いて完成、以降の改造も未来永劫ないとは限りませんから。

              親コメント
            • by fl (43569) on 2012年12月26日 1時30分 (#2296395) 日記

              「そこだけ禁止」言うは易し、行うは難し。
              文脈に依存したコーディング規約の適用はすぐに破たんする。
              たとえば、リソースを使っていなかったモジュールを後から使うように変えたら、途中 return は全部書き換えるのか。

              そもそも管理リソースを減らしたくて一律に適用しているのだから、本末転倒。

              親コメント
              • >たとえば、リソースを使っていなかったモジュールを後から使うように変えたら、途中 return は全部書き換えるのか。
                当たり前ですが、何か問題でも?
                全然破綻している例えになってませんよ。

                >そもそも管理リソースを減らしたくて一律に適用しているのだから、本末転倒。
                管理リソース削減のためにコードを難解にするほうが本末転倒だと思うのですが、
                どうやらMISRA C使っている業界とは住む世界が違うようです。
                親コメント
              • by Anonymous Coward

                MISRA C使っている業界は工数に占めるコーデングとテストの割合が10%未満だしなあ。
                大体数年かけて、仕様策定に50%弱、出荷前までのレビューに同じく50%弱使って、設計とコーディングとテストは残り工数でやる感じ。
                常に10件以上の開発が並行して走っていて兼務するため、いちいち覚えておけないので毎回その場で把握と問題解決をする。

          • by Anonymous Coward on 2012年12月25日 6時31分 (#2295827)

            残念ながらMISRA C++というC++に対応したとされるものがありまして、
            それにも変わらずばかばかしいルールが残ってるんですよね

            親コメント
          • by Anonymous Coward

            たった一人の間抜けはどんな規約を用いても深刻なバグを作りこむのであまり意味がないのでは。
            むしろ、保守性が悪化することでリソースリークが起こりやすくなる場合もありますし(実際そういうソースに出会ったこともあります)。

          • by Anonymous Coward

            > 大多数にはバカバカしいルールでも、たった一人の間抜けに躓かないための妥協が多くなる。

            間抜けに躓かないのを基準にルールをつくると、本来不要なルールがいくらでも増えていく。
            コードの健全性を期待するなら lint みたいなチェッカで評価するのを標準化するほうがより適切かと。

            > C にデストラクタがあればこんなルールは生まれないね。

            C でデストラクタ相当の処理を設けたいなら、リソース割当と解放をする呼び出し関数を経由するんじゃないかな。

            • by fl (43569) on 2012年12月26日 1時48分 (#2296396) 日記

              コードの健全性を期待するなら lint みたいなチェッカで評価するのを標準化するほうがより適切かと。

              そんなツールが手軽に使えれば、泥臭いデザインパターンみたいなコーディング規約に頼らなくてもいいのだが。
              無いものねだりは仕方がない。

              親コメント

Stableって古いって意味だっけ? -- Debian初級

処理中...