2012-03-15 9 views
0

以下は、悪いコーディング慣行と見なされますか?forループでメソッド呼び出しを行うのは悪い習慣と考えられますか?

for (row = 0; row < 4; row++, printf("\n")) { 
    for (col = 0; col <= row; col++) { 
     printf("*"); 
    } 
} 
+0

いいえ、それはCです。「C」はサイレントの意味ではありませんか? ;) –

+0

@KenThompson皮肉なことに、C言語の本当の意味は非常にわかりにくいです... 'C'は、C言語がB言語に基づいていたので、アルファベットでBの後に来ることを意味します。 BCPLのダウンバージョン」を参照してください。 Cプログラマだけが、このように遠くに引っかかった秘密の言葉で物事を命名します! :) – Lundin

答えて

1

はい、これは悪い習慣とみなされます。

MISRA-C:むしろ私自身の主観的な意見に基づいて、(限定された値の)返事をするよりも、私は広く認識権限引用う2004、13.5ルール:

「3つの文をforループのループは、ループ 制御にのみ関係します。/-/

"第3の表現:ループカウンタ(i)のインクリメントまたはデクリメント"

MISRA-Cは、カンマ演算子の使用を完全に禁止しています。余計に危険なものとみなされます。

3

シンプルで読みそれだけでは容易ではない、読みやすいと同じアプローチは次のようになります。

for (row = 0; row < 4; row++) { 
    for (col = 0; col <= row; col++) { 
     printf("*"); 
    } 
    printf("\n"); 
} 
4

は私が優れているこの質問、で応答しましょうか?

while(1) {} 

または

for(;;) {} 

どちらも同じ結果にコンパイルして、効果的に同じものです。 forループの更新部分に任意のメソッド呼び出しを追加すると、同じことがあなたの質問に当てはまります。それはコンパイルする。それは期待どおりに動作します。主な違いは、読みやすさと好みです。

ほとんどのプログラマーは、メソッド呼び出しをforループの本体にもっぱら入れたいと思っています。大会以外の理由であれ、他の誰かがあなたのforループを見ているときには、ループカウンターなどを見るのに多くの時間を費やす必要はありません。あなたは賢明かもしれませんが、確立されたパターンに固執することをお勧めしますあなたの同僚の方が簡単です。あなたがあいまいな構文を好む同僚と働いているなら、あなたの心の内容までそれに行ってください!

+0

* "あなたがあいまいな構文を好む同僚と働いているなら、あなたの心の内容までそれに行ってください!" *同意しない。あなたの現在の同僚は、有効期限が過ぎてもコードを長く維持しなければならない人ではありません。彼らは仕事をするかもしれないが、後に来る私たちの人たちは、これらの特性を継承することは保証されていない。 –

+0

この永遠のループスタイルの議論がこことそこに続いています。いくつかの人々は(1)が明確で疑問に思っている間(;;)スタイルを信じていました。私はその議論のコンセンサスが( ";;)は"条件は常に真 "のコンパイラ警告を省略しているので、より良いことだと信じています。そして、それは2つの形式の唯一の違いです。 – Lundin

+0

_ "あなたがあいまいな構文を好む同僚と働くならば..." _私はyajoeやCodyに同意しない。個々の開発者は、大文字と小文字を区別して構文を決定する必要はありません。ソリューションは、会社のコーディングスタイルポリシーを作成することです。 – Lundin

関連する問題