45

ほとんどのC++命名規則ではcamelCaseIdentifiers、クラス(Person、 )の場合は大文字で始まる名前、Bookingフィールドと変数(getPrice()、、 )の場合は小文字で始まる名前の使用が規定されています。これらの推奨事項は、クラス( 、、、)およびメソッドとフィールド(、、、 )の小文字の名前を含むC++ライブラリの命名規則とは完全に一致していません。さらに複雑なのは、オペレーティングシステムとCライブラリ関数です。これらの関数には、CおよびUnixでは圧縮された小文字の名前が含まれ、Windowsでは大文字で始まる関数が含まれます。isValid()largestValuestringsetmapfstreamnames_joined_with_an_underscorefind_first_oflower_boundreverse_iteratorfirst_type

その結果、一部の識別子はC ++ライブラリ、C、またはオペレーティングシステムの命名規則を使用し、他の識別子は規定のC ++規則を使用するため、私のコードは混乱しています。ライブラリの機能をラップするクラスまたはメソッドを作成するのは面倒です。これは、類似したものに対して異なるスタイルの名前で終わるためです。

では、これらの異なる命名規則をどのように調整しますか?

4

10 に答える 10

22

Diomidis、私はあなたの痛みを共有し、私が使用するさまざまなライブラリ/フレームワーク (MFC および/または STL/Boost) で動作するものを見つけようとして、長年にわたってさまざまなスキームを切り替えることに多くの時間を費やしてきました。STL などの単一のフレームワークで作業する場合は、そのフレームワークで使用されている命名規則をコピーして試すことができますが、別のフレームワークを導入すると、簡単にバラバラになります。

最後に、私が作成するすべての新しいコードに (Google C++ スタイル ガイドラインに基づいて) 単一のスタイルを採用し、必要に応じて古いコードをリファクタリングしてこのスタイルを使用しています。さまざまな命名規則を簡単に調整することはできないため、時間を無駄にしないでください。チーム/部門/会社にスキームを適用し、それに固執します。ただし、スキームを組み合わせて使用​​する場合にコードが「醜い」ように見えることにこだわらないでください。

Google C++ のガイドラインは、いくつかのマイナーな修正を加えた、非常に優れた私見です。ここでガイドをチェックしてください:

https://google.github.io/styleguide/cppguide.html#Naming

于 2008-12-08T18:54:11.070 に答える
20

C++ を採用する方法の 1 つnaming_conventionは、これが現在の文献のほとんどのコード例で行われていることです。

これらの規則が製品コードに移行するのをゆっくりと見ていますが、多くの場所で依然として普及している MFC 命名規則との戦いです。

古い標準と戦う他のスタイルの違いは、m_メンバーを示すのではなく、末尾のアンダースコアを使用することです。

于 2008-12-08T18:49:25.667 に答える
5

なぜ和解する必要があるのですか?コードがコンパイルされ、作業を完了できる限り、心配する必要はありません。

于 2008-12-08T18:50:24.323 に答える
4

コード スタイルに関しては、私は完璧主義者になる傾向があり、これは常に私を悩ませてきました。普遍的な基準があればいいのにと思いますが、ありません。私のプロとしてのキャリアの中で、個々のプロジェクトのプログラマーが一貫している限り、それが期待できる最善の方法であることがわかりました。

最終的には、メソッド、オブジェクト、または関数がどのライブラリからのものかを知ることに帰着すると思います。それを知っていれば、プロジェクトに多くのライブラリが含まれていないと仮定すると、そのライブラリで使用されている規則を簡単に覚えることができます。使用するライブラリのコードと一致するように独自のコードを適応させようとしましたが、それは常に移動するターゲットであり、最終的にはイライラするだけです.

于 2008-12-08T18:49:48.660 に答える
3

正直なところ、私はライブラリをそのまま使用し、独自のコーディング スタイルに固執します。あなたはそれをラップすることができますが、それはやり過ぎのようです.

于 2008-12-08T19:46:17.017 に答える
3

私が取り組んでいるプロジェクトでは、プロジェクトのコード規則に従っています。他のものを呼び出すときは、そのライブラリの API を使用します。

また、ライブラリのラッピングは悪い考えだと付け加えておきます (私が取り組んでいるコード ベースにはたくさんあります)。これは通常、自分の問題を解決する開発者によって行われ、原則として使用には不適切であるためです。他のすべての開発者によって。反面、高品質なラッピングは高い。

于 2008-12-08T18:51:05.490 に答える
2

名前の衝突を避けるために、彼らが意図的に標準ライブラリを推奨されるコーディング規約とは異なるものにすることを選択したことをずっと前に読んだことを思い出しているようです。しかし、今はそれについて言及している参考文献は見つかりません。標準ライブラリ用に予約されているため、型名に小文字を使用しないでください。アンダースコアを使用しても、同様のことが起こっていると思います。プロジェクト内のコードから標準コードを明確に分離しているため、複数の命名規則を問題とは見なしていません。私は常に、型には大文字のキャメルケースを使用し、メソッド/メンバーには小文字のキャメルケースを使用して、プロジェクトでコードを記述しています。私の現在の職場では、タイプに加えてメソッドにキャメルケースを使用しているため、非常にイライラします。しかし、彼らはハンガリーの疣贅も好きです、

于 2008-12-08T19:35:32.953 に答える
2

お気に入りの引用::

標準の最も良い点は、選択できるものが非常に多いことです。

私の提案は、あなたの会社のコードで最も頻繁に発生するライブラリの規則 (おそらく、boost も固執していると思われる C++ ライブラリ) を採用し、それを標準にすることです。それ以外の場合は、まったく持っていない可能性があります。

于 2008-12-08T18:50:50.920 に答える
2

まあ、標準ライブラリの実装方法を変えることはできないので、それについていく必要があると思います。調整に関しては、少し前に Win32 API を書いているときに、API で行われているように PascalCasing で独自のメソッドに名前を付けようとしましたが、それは正しく感じられませんでした。そのため、キャメルケースでメソッドに名前を付けることに戻りました。私はそれが混乱していることに同意しますが、他のオプションは、使用するすべての新しいフレームワークまたはライブラリにスタイルを適応させることです。次に、単一のプロジェクトで異なる規則を使用する複数のライブラリを使用するという問題があります。したがって、私のアドバイスは、独自のメソッドとクラスに適していると思われるものに固執することです。または、企業環境では、会社のベスト プラクティスとガイドラインに固執します。

于 2008-12-08T18:58:39.000 に答える
1

違いを受け入れる必要があります。

remove_copy_if の使用を見ると、これがアルゴリズムであることがすぐにわかります。アルゴリズムには一定の保証がある (またはない) ため、これは実際にはプラスの機能です。

また、独自のカスタム アルゴリズムにも命名規則を使用しています。

于 2012-02-07T21:10:08.787 に答える