2011-06-30 9 views
1

HalloTodd HoffのC++ Coding Standardをお勧めしますか?

現時点で私は良いC++コーディング標準を探しています。インターネットでは、多くのコーディング標準を見つけることができました。ほとんどの場合、いくつかのルールが共通しています。しかし違いもあります。 Todd Hoff(http://www.maultech.com/chrislott/resources/cstyle/CppCodingStandard.html)のC++コーディング標準が見つかりました。私は一見を見て、それが本当に素晴らしいことを発見した。彼はいくつかの共通のルールだけでなく、詳細にも行きました。良い例が名前大会です。

誰かがこのC++コーディング標準を使用していて、それを使用するかどうかを知りたいと思いますか?

+1

特に分かりません。しかし、FYI、[私が推薦する本はここにリストされています](http://jcatki.no-ip.org/fncpp/Resources)。ホフがそのリストに載っていない理由があるかもしれません。 –

+0

ありがとうございます。 :-)あなたは正しいかもしれませんが、ホフがリストに載っていない理由があるはずです。しかし、それはまた、この理由が興味深いです。 :-) –

+1

特定のコーディング基準を推奨するかどうかを大勢の聴衆に問うことは、主題の回答を求めることになります。確かに、コーディングの標準設定は、私が開発者の間で考えることができる最も主観的な話題です。コードの可読性を向上させ、コードベースに一貫して適用することをお勧めします。 – razlebe

答えて

7


恐ろしいの命名規則は、命名規則は非常に非標準です。私が働いたほとんどの場所で、私が見てきたほとんどの規則では、メンバー関数とメンバーデータは同じ規則に従います:すべて小文字、アンダースコアで区切られた単語。

これらのInitialCaps識別子は、目に見えても読みにくいです。これに関する複数の人的要因の研究が行われてきた。 WordsSeparatedByInitialCapsは、words_separated_by_underscoresという人々が読むのがはるかに難しいです。視覚障害者のために、InitialCapsの使用は価値がないより悪いです。私が影響力を持つコーディング標準では、InitialCapsはクラス名とクラス名のみです。

ALL_CAPSはInitialCapsよりも読みにくいです。すべての法的契約には真に重要な法的条項があり、弁護士はこれを光栄に思って無視したいと考えています。これらの重要な節は簡単に見つかります。すべて大文字で表示されます。すべての大文字のテキストは、目撃者のために読むのが非常に難しいです。それが弁護士がそれを使用したい理由です。できるだけALL_CAPSを避ける​​べきです。マクロの場合のみALL_CAPSを予約し、ALL_CAPS以外のマクロは決して定義しないでください。これにより、プロセッサー名と識別子の衝突が最小限に抑えられます。

ハンガリー表記は、部分的に部分的にしか使用されていなくても吸う。

違反RAII
規格はRAIIに違反しています。ウィット(重点鉱山):

オブジェクトのコンストラクタで実際の作業をしないでください。コンストラクタの内部では、変数のみを初期化したり、失敗しないアクションのみを行います。構築を完了するオブジェクトのOpen()メソッドを作成します。 オブジェクトのインスタンス化後にOpen()を呼び出す必要があります。デストラクタデストラクタの
アドバイスに

非常に悪いアドバイスは、コンストラクタのアドバイスと同じくらい悪いです。

本当にデストラクタに慎重に投げ例外うか? 「破壊者に例外を投げないでください。このセクションから

より、

特別なケアは、オブジェクトの破壊時に発生する可能性が例外をキャッチするために取られなければなりません。オブジェクトが例外をスローするときにオブジェクトを完全に破棄するように特別な注意を払わなければなりません。

誰かがそれをやろうとしていますか?単純な答えは正しいものです:デストラクタに例外を投げないでください。これまで

これは私がその構築物を嫌い

/////////////////////////////// PUBLIC /////////////////////////////////////// 

//============================= LIFECYCLE ==================================== 

XX::XX() 
{ 
}// XX 

XX::XX(const XX&) 
{ 
}// XX 

XX::~XX() 
{ 
}// ~XX 


//============================= OPERATORS ==================================== 

XX& 
XX::operator=(XX&); 
{ 
    return *this; 

}// = 

//============================= OPERATIONS =================================== 
//============================= ACESS  =================================== 
//============================= INQUIRY =================================== 
/////////////////////////////// PROTECTED /////////////////////////////////// 

/////////////////////////////// PRIVATE /////////////////////////////////// 

愚か(6 == errorNum)ガベージ
こと真に恐ろしいです。それは醜いもので、カートの前に馬を置きます。ここで適切なことは、ウォールまたはより厳しい条件の下でコードをクリーンにコンパイルし、コンパイラが見つけることができない/見つからない追加の問題を検出するコードアナライザを使用することです。 20年前に何人かの馬鹿がif (errorNum = 6) ...を書いたので、私は物事をベースにして書き直させてはいけません。

ブール型
の雄牛このセクションのタイトルは正しいです:それは雄牛です。彼が書いたものは時代遅れで間違っています。新しいコードを書く場合は、boolを使います。古いコードを維持している場合は、変更する必要がない限り変更しないでください。

ブールと真を比較しないように彼のアドバイスが正しいです。解決策は、ブール値をfalseと比較することではありません(またはさらに悪いのはif (FALSE != func()) ...)。解決策はブール値を何かと比較することではありません:if (func()) ...

この規格の問題は次々と起こります。
これは使用しないでください。

+0

RIIA = RAII私は –

+0

と仮定@jk:修正されました。ありがとう。私は時々ディスレクシアです。 –

7

ほとんどのことをよく見ています。私が本当に同意しないものとして私の目をつかんだことの1つは、彼がそこで提案している命名規則の一部ですが、物事に名前を付ける一貫した方法を持っているという概念は死んでいます。 101個のルール、ガイドライン、およびハーブサッターとアンドレイアレキによってベストプラクティス:

別のリソースあなたが見たいかもしれませんが標準コーディングC++をです。それはTodd Hoffのようには具体的ではありませんが、なぜ特定のルールがコーディング標準の一部であるべきかについてより多くの議論があります。ホフについて

+1

これは素晴らしい本です。 – UncleZeiv

+0

ありがとうございます。私はまた、多くの人々がこの本を推薦していることを知りました。 :-)(私はこの本を購入すると思います)たとえば、Todd Hoffの標準で提案されているように、大文字の命名規則を関数に使用するのは好きではありません。しかし、それは私がこの標準に適用できる小さな変更です。 –

+4

Sutter&Alexandrescuのルール#0(「小さなものを汗ばませない」)は特に重要です。あまりにも多くのプロジェクトがコーディング基準でこのルールに違反しています。 –

関連する問題