c++の命名規則について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
こんた

c++の命名規則について

#1

投稿記事 by こんた » 7年前

ネットでc++の命名規則を検索するとほぼすべてのサイトでクラス名はパスカル記法にするべきとなっています。

がしかし、c++の標準ライブラリではクラス名はスネーク記法を採用しています。

javaはすべてのクラスを初めからパスカル記法で書いているのでそれに合わせる意味でもクラス名はパスカル記法にするべきだと思うのですが、
c++の場合、自作クラスをパスカル記法で書いてしまうとコードの中でスネーク記法とパスカル記法が出てくることになり返ってコードが見にくくなる気がするのですがなぜクラス名はパスカル記法が推奨されることが多いのでしょうか?

あと、皆さんはクラス名はどう命名していますか?
参考までにお教えしていただけると助かります。

inemaru
記事: 108
登録日時: 7年前

Re: c++の命名規則について

#2

投稿記事 by inemaru » 7年前

自分が普段使っている命名ルールは、「Google C++スタイルガイド」です。
https://google.github.io/styleguide/cppguide.html

公式ページは英語ですが、検索すると有志の方が日本語に翻訳したものが見つかると思います。

「Google C++スタイルガイド」で、クラス名(型名)は、
大文字で始めて、単語の頭文字を大文字にして、アンダーバーを使わないようにする。
となっているので、パスカル記法を使っています。

個人的に可読性は良いと感じています。

標準ライブラリの命名規則について未確認かつ不確かな情報ですが、
「C++標準ライブラリは、既存のライブラリと名前衝突しないように命名規則を一般的でないものにしている」
みたいなことを聞いたことがあります。

こんた

Re: c++の命名規則について

#3

投稿記事 by こんた » 7年前

inemaru さんが書きました:標準ライブラリの命名規則について未確認かつ不確かな情報ですが、
「C++標準ライブラリは、既存のライブラリと名前衝突しないように命名規則を一般的でないものにしている」
みたいなことを聞いたことがあります。
なるほど…。
しかしc++には名前衝突しないためにそもそも名前空間というものがあるのですから、
わざわざクラス自身の名前を他と変える必要性が感じられません。

正直、有難迷惑に感じます…。

inemaru
記事: 108
登録日時: 7年前

Re: c++の命名規則について

#4

投稿記事 by inemaru » 7年前

標準ライブラリの命名規則に関しては、
イマイチはっきりした情報が見つけられない(不確かな情報)なので、
あまり信用しないで
一意見として受け取ってください。

少し調べてみたところ、C++標準委員会とかで議論されてはいるみたいですが
  • ローカル変数と型名の衝突の回避
  • テンプレート引数名をテンプレートクラス内でusing宣言する事が多い為、名前衝突が起こりうる
くらいのことしかわかりませんでした。

誤解釈とかもありうるので、
間違ってたらすいません。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: c++の命名規則について

#5

投稿記事 by YuO » 7年前

歴史的経緯を考えれば,Upper-camel (Pascal) case ではないことは,ある程度予想が付きます。

まず,Cのライブラリが小文字のみからなること。
初期のC++コンパイラであるCfrontはCへのトランスレータですから,Cのライブラリと調和が取れた表記であることは必要条件です。
この時点で,Upper-camel caseはCのライブラリと合わなくなります。

あと,namespaceは標準化がなされる段階で入った,新しい機能です。
ref) D&E 日本語版 P.165
このため,少なくとも初期のライブラリの名前付け規約を考える上で,namespaceは存在せず,考慮に入れられなかったのは間違いないです。


で,一番大きそうなもの。
Stroustrup御大曰く
Stroustrup: C++ Style and Technique FAQ さんが書きました:I prefer to use underscores to separate words in an identifier (e.g, element_count) rather than alternatives, such as elementCount and ElementCount.
だそうです。
ref) http://www.stroustrup.com/bs_faq2.html#Hungarian

こんた

Re: c++の命名規則について

#6

投稿記事 by こんた » 7年前

YuO さんが書きました:歴史的経緯を考えれば,Upper-camel (Pascal) case ではないことは,ある程度予想が付きます。

まず,Cのライブラリが小文字のみからなること。
初期のC++コンパイラであるCfrontはCへのトランスレータですから,Cのライブラリと調和が取れた表記であることは必要条件です。
この時点で,Upper-camel caseはCのライブラリと合わなくなります。
c言語との調和性はなるほど確かに納得のいく理由になりそうです。
c++はあくまでc言語の強化なので標準ライブラリの命名規則をc言語に沿うようにした、という認識でいいのでしょうか?
YuO さんが書きました:で,一番大きそうなもの。
Stroustrup御大曰く
Stroustrup: C++ Style and Technique FAQ さんが書きました:I prefer to use underscores to separate words in an identifier (e.g, element_count) rather than alternatives, such as elementCount and ElementCount.
だそうです。
ref) http://www.stroustrup.com/bs_faq2.html#Hungarian
c++の開発者の好み…
あくまで利用者である以上は有無を言わずそれに順応しろということですかね…

たいちう
記事: 418
登録日時: 13年前

Re: c++の命名規則について

#7

投稿記事 by たいちう » 7年前

> c++の開発者の好み…
> あくまで利用者である以上は有無を言わずそれに順応しろということですかね…

文句を言うなら使うな、というのは極論ですが、不便に思う人が少数派なのではないですか?
標準ライブラリの部分と、自分(自社)で書いた部分が区別しやすいとも言えます。
多くの人が不便に思うなら、今の形に落ち着いていないでしょう。
最初の開発者の意向も尊重されますが、今や多くの人が標準化に関わっています。

現実問題として、30年以上使われている標準ライブラリの命名規則は変えられず、
自作の部分を気に入ったコーディングルールで作成するしかないのではないでしょうか。
スネーク記法で標準ライブラリに合わせる方法もありますが、
こんたさんの調査結果によると、自作部分でパスカル記法を採用している人が多いのでしょう。
私もその一人です。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: c++の命名規則について

#8

投稿記事 by YuO » 7年前

こんた さんが書きました:c++はあくまでc言語の強化なので標準ライブラリの命名規則をc言語に沿うようにした、という認識でいいのでしょうか?
初期のC++はC with classesという名前の通り,Cにクラスを追加しただけのものだったわけで,Cに沿わせた可能性は高いと思います。
こんた さんが書きました:c++の開発者の好み…
あくまで利用者である以上は有無を言わずそれに順応しろということですかね…
標準ライブラリがsnake caseで提供され,それを使う以上は標準ライブラリがsnake caseであることを受け入れなければなりません。
それ以外の識別子には,いくつかの制限がある (__などが使えない) ことを除けば名前について制限は無いのですから,
自分の作成する識別子の名前に対しては,自分の考える名前付け規約で名前を付ければよいと思います。

こんた

Re: c++の命名規則について

#9

投稿記事 by こんた » 7年前

みなさまご解答ありがとうございました。
c++標準ライブラリのスネーク記法についての理由はある程度納得いきました。

それを踏まえたうえで自分の命名規則はもう一度よく考えていきます。

閉鎖

“C言語何でも質問掲示板” へ戻る