web-dev-qa-db-ja.com

C ++の関数名:大文字にするかどうか

C++での関数の命名規則は何ですか?

私はJava環境から来ているので、通常は次のような名前を付けます:

myFunction(...) {
}

C++で混合コードを見てきましたが、

myFunction(....)
MyFunction(....)
Myfunction(....)

正しい方法は何ですか?

また、クラスメソッドと非クラスメソッドで同じですか?

60
user69514

「正しい方法」はありません。いくつかの規則がありますが、それらはすべて構文的に正しいです。 Googleスタイルガイド に従うことができますが、他にもあります。

上記のガイドから:

通常の関数には大文字と小文字が混在しています。アクセサーとミューテーターは、変数の名前に一致します:MyExcitingFunction()、MyExcitingMethod()、my_exciting_member_variable()、set_my_exciting_member_variable()。

40
int3

C++ 11以降では、snake_caseまたはcamelCase関数名

これは、クラスを range-based for-loop のrange-expressionとして機能させるためです。 する必要がある そのクラスのbeginおよびend(大文字と小文字を区別する)という関数を定義します。

その結果、例えば関数名のPascalCaseは、範囲ベースのforでクラスを動作させる必要がある場合、プロジェクトの命名の一貫性を破る必要があることを意味します。

36
emlai

私が見たほとんどのコードは camelCase 関数(小文字の頭文字)、およびProperCase/PascalCaseクラス名、および(ほとんどの場合)、 snake_case 変数。

しかし、正直に言うと、これはすべて単なるガイダンスです。最も重要なことは、コードベース全体で一貫性を保つことです。自然に見える/自分に合ったものを選び、それにこだわる。進行中のプロジェクトに参加する場合は、その標準に従ってください。

27
Donnie

私が生産コードで見る最も一般的なものは次のとおりです(この順序で):

myFunctionName     // lower camel case

MyFunctionName     // upper camel case

my_function_name   // K & R ?

プログラマーがC++コードで使用する命名規則は、通常、プログラミングの背景と関係があります。

例えば。元Javaプログラマーは、関数にキャメルケースの小文字を使用する傾向がある

16
Steven Keith

標準ライブラリのパターンは通常my_function を見ると、すべての人が独自の方法を持っているようです:-/

11
TofuBeer

個人的には、関数にはthisStyleよりThisStyleの方が好きです。これは本当に個人的な趣味のためであり、おそらくJavaの影響を受けますが、関数とクラスが異なるように見えるのはとても好きです。

しかし、私がそれについて議論しなければならなかったなら、私は区別が単なる美学以上であると言うでしょう。一時的な関数スタイルの構築に出くわすとき、それは少し考えを保存します。それに対して、Foo(1,2,3)が関数呼び出しであるかどうかは実際には問題ではないと主張できます-コンストラクターである場合、とにかく値でFooを返す関数とまったく同じように動作します。

また、この規約は、Cが別個のタグ名前空間を持っているため、C++が継承するクラスと同じ名前の関数がエラーではないという大失敗を回避します。

#include <iostream>

struct Bar {
    int a;
    Bar() : a(0) {}
    Bar(int a) : a(a) {}
};

struct Foo {
    Bar b;
};

int Bar() {
    return 23;
}

int main() {
    Foo f;
    f.b = Bar();
    // outputs 23
    std::cout << f.b.a << "\n";
    // This line doesn't compile. The function has hidden the class.
    // Bar b;
}

結局のところ、Barは名詞と動詞の両方であるため、ある場所ではクラスとして、別の場所では関数として定義できます。名前空間の適切な使用など、衝突を回避するより良い方法があることは明らかです。ですから、私が言うように、実際には、クラスと区別する必要があるためというより、小文字のイニシャルを持つ関数の外観を好むからです。

7
Steve Jessop

Javaとは異なり、C++には「標準スタイル」がありません。私がこれまで働いてきた会社のほとんどは、独自のC++コーディングスタイルを備えており、ほとんどのオープンソースプロジェクトにも独自のスタイルがあります。あなたが見たいと思うかもしれないいくつかのコーディング規約:

C++コーディング標準では、言語のどの部分を使用しないかを指定することが多いことに注意してください。たとえば、Google C++スタイルガイドには「C++例外は使用していません」とあります。私が働いたほとんどどこでも、C++の特定の部分を禁止しています。 (基本的に、私が働いていた場所の1つは、「Cのプログラムですが、newdeleteは大丈夫」と言っていました!)

5

他の人が言ったように、C++にはそのようなことはありません。そうは言っても、標準ライブラリを記述するスタイル-K&Rを使用する傾向があります。

また、 FAQ Bjarne Stroustrupによるエントリ を参照してください。

4

私はmyFunction(...)を好むが、それは好みの問題だと思う

4
sud03r

開発者間で一貫性がある限り、必要に応じて実行してください。グループ。数年ごとに規則が変わります.....(覚えているnIntVAr)...

3
Dani

言語にはそれほど「正しい」方法はありません。それはより個人的な好み、またはチームの標準です。私は通常、独自のコードを作成するときにmyFunction()を使用します。また、C++で頻繁に表示されることについて言及しなかったスタイルはmy_function()です。スペースの代わりに大文字、アンダースコアを使用しません。

本当にそれはあなたが働いているコードによって指示されているだけです。あるいは、もしそれがあなた自身のプロジェクトなら、あなた自身の個人的な好みです。

3
Daniel Bingham

それはすべてあなたの正しい定義に依存します。コーディングスタイルを評価する方法はたくさんあります。読みやすさは重要です(私にとって)。それが、関数名と変数名を書くmy_functionの方法を使用する理由です。

2
Peter Stuifzand